Go语言中文网 为您找到相关结果 237

Golang方法和接口

在编程语言中,方法和函数的概念需要搞清楚。函数指的是一个封装的代码块,我们可以直接调用它,并返回结果。而方法其实也是一种函数,只不过方法需要和某个对象绑定。Golang并没有类的概念,不过仍然有方法和接口这些概念。 方法 方法接收者 方法接收者是一个特殊参数,给函数指定了这个参数之后,函数就成为方法了。这个特性有点像Kotlin和C#中的扩展方法,定义了带有接收者的方法之后,接收者这个类型就好像定义了这个方法一样,我们可以直接在该类型上调用方法。这在功能上,和面向对象的概念是很类似的。 例如下面这样,定义了一个汽车结构,然后定义了一个接受者方法。然后就可以用面向对象的方式来调用这个方法了。 func Method() { //方法接收者 car := Car{id: 1} car.beep(...阅读全文

博文 2017-08-03 13:05:04 乐百川

全局命名系统Upspin

Google 的一组开发者[宣布](https://security.googleblog.com/2017/02/another-option-for-file-sharing.html)了一个非官方开源项目  Upspin :某种全局命名系统。它不是 Google 的项目,但得到了 Google 的支持。 开发者称,现有的文件共享机制支离破碎,人们浪费了很多时间在多个步骤的拷贝和重新打包上。Upspin 通过向所有文件提供一种全局性的命名空间去试图改进这种状况。使用 Upspin 命名,一个文件不需要下载再上传就能安全的共享高效的拷贝,让任何有权限的人访问。 举例来说,用户有一个文件名字叫 ann@example.com/dir/file,任何有权限的人都可以通过 Upspi...阅读全文

go-struct、方法

package main import "fmt" func main() { //创建对象,通过.方式进行初始化 a := person{} a.name = "wyf" a.age = 30 fmt.Println(a) //创建对象,通过类似构造的方式进行初始化 b := person{ name: "wyff", age: 300, } fmt.Println(b) //值传递 A(b) fmt.Println(b) //person引用传递 fmt.Println("-------引用地址传递--------") B(&b) fmt.Println(b) fmt.Println("-------初始化一个引用地址类型--------") r := &person{ name: "x...阅读全文

博文 2016-08-30 20:00:08 u013210620

go语言实现接口,接受者应该是传值还是传引用(传引用兼容传值)

/* go语言中给接口赋值的时候,对象如果是值(对于引用的接受者处理不了) 如果是指针,则可以自动实现值的处理 */ package main import "fmt" //定义Integer类型 type Integer int type LessAddInf interface{ Less(n Integer) bool Add(n Integer) Integer } func (this Integer) Less(n Integer) bool{ return this < n } func (this *Integer) Add(n Integer) Integer{ *this += n return *this } type Computer struct{ CPU stri...阅读全文

博文 2016-10-27 15:00:03 davidsu33

Go methods for types

You can define methods on struct types. The method receiver appears in its own argument list between the func keyword and the method name. The code snipers here just run as it looks like, so no results given. package main import ( "fmt" "math" ) type Vertex struct { X, Y float64 } func (v *Vertex) Abs() float64 { //一个Vertex指针类型的接收器,也是方法调用者 return m...阅读全文

博文 2015-12-21 20:00:00 resouer

老司机带你用 Go 语言实现 Raft 分布式一致性协议

老司机带你用 Go 语言实现 Raft 分布式一致性协议  随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。   为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。任何一个分布式系统都无法同时满足 Consistency(一致性),Availability(可用性),Partition tolerance(分区容错性)这三个基本需求,最多只能满足其中两项。 但是,一个分布式系统无论在 CAP 三者之间如何权衡,都无法彻底放弃一致性(Consistency),如果真的放弃一致性,那么就说明这个系统中的数据根本不可信,数据也就没有意义,那么这个系统也就没有任何价值可言。所...阅读全文

博文 2017-03-23 08:20:49 chauncy

golang-nsq消息队列应用

消息队列由生产者和消费者共同协作,生产者产生消息放入队列中,消费者从队列中取出消息。 1.消费者 type Producer struct { id int64 addr string conn producerConn config Config logger logger logLvl LogLevel logGuard sync.RWMutex responseChan chan []byte errorChan chan []byte closeChan chan int transactionChan chan *ProducerTransaction transactions []*ProducerTransaction state int32 concurrentProduce...阅读全文

博文 2017-10-09 01:30:01 fwdqxl

go-struct、方法

package main import "fmt" func main() { //创建对象,通过.方式进行初始化 a := person{} a.name = "wyf" a.age = 30 fmt.Println(a) //创建对象,通过类似构造的方式进行初始化 b := person{ name: "wyff", age: 300, } fmt.Println(b) //值传递 A(b) fmt.Println(b) //person引用传递 fmt.Println("-------引用地址传递--------") B(&b) fmt.Println(b) fmt.Println("-------初始化一个引用地址类型--------") r := &person{ name: "x...阅读全文

博文 2016-08-21 19:00:08 u013210620

区块链矿池的分配模式

### 作者介绍 JouyPub 技术经理 某互联网公司 ### 产生背景   当下各种以挖矿来获得收益的币种,随着时间的推移,挖矿的难度也越来越大,如果仍然靠单机去挖矿,几乎已经不可能了,所以就有矿池。例如按照当前的算力(20EH/s),一个20TH/s的矿机,挖到一个区块的时间为19年,也就是说如果单机挖矿需要19年才能获得奖励,这其中还不包括机器损耗、难度增大等因素,所以只有大家加入到一个矿池,共享自己的算力,爆块后,根据不同的分配模式,奖励再分配给个人。这种挖矿模式可以让个人的收益更加稳定,对于矿池而言,也会收取一些交易手续费。 顺便我们来算下现在挖矿多少天能回本。以蚂蚁矿机为例,每台的算力大概为20TH/s,功率1700W,成本取5000元,全网算力取20EH/s,当前爆块奖励为1...阅读全文

博文 2018-09-22 00:19:26 chongdongshequ

GO面向对象:method

method的语法如下: func (r ReceiverType) methodName(parameters) (results) go中的method是附属在一个给定的类型上的,他的语法和函数的声明语法几乎一样,只是在方法名之前增加了一个receiver,也就是method所依附的主体(可以面向对象中的对象理解) 例如下面的例子: type Box struct { width, heigh, depth float64 } func (b Box) Volume() float64 { return b.width * b.heigh * b.depth } func main(){ b:=Box{4,4,4} volume:=b.Volume() } Volume这个method是...阅读全文

博文 2016-01-29 18:00:01 fzk2008

设计模式-04-职责链模式

职责链模式概述职责链模式是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 实现使用数据过滤类来实现职责链模式。用户传递数据给FilterChain类,但是数据具体会被哪个过滤器处理客户并不知道,FilterChain最终会返回被过滤后的数据给用户。 总结与分析职责链模式让请求者和接收者解耦,从而可以动态地切换和组合接收者 代码实现:职责链模式(php/go...阅读全文

博文 2019-04-11 09:34:40 疯狂的卡卡

gof23结构类模式(golang版)

适配器模式 Adapter模式也被称为Wrapper模式,有以下两种: 类适配器(使用继承) https://design-实现目标接口,继承被适配类 对象适配器(使用委托) 继承目标类,依赖被适配类 参考http://blog.51cto.com/liuxp08... package main import ( "fmt" ) func main() { duck := &MallardDuck{} turkey := &WildTurkey{} turkeyAdapter := NewTurkeyAdapter(turkey) fmt.Println("The Turkey says...") turkey.gobble() turkey.fly() fmt.Println("The D...阅读全文

博文 2018-12-02 13:34:44 菟潞寺沙弥

Golang RabbitMQ学习笔记(1 : 简单实现消息发送接收)

****1:生产者**** ```go package main import ( "github.com/streadway/amqp" "log" ) //错误处理 func FailOnError(err error, msg string) { if err != nil { log.Fatalf("%s:%s", msg, err) } } func main() { conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") FailOnError(err, "连接RabbitMQ失败") defer conn.Close() ch, err := ...阅读全文

兄弟连区块链技术培训Fabric 1.0源代码分析(34) Peer #peer chaincode命令及子命令实现

兄弟连区块链技术培训Fabric 1.0源代码分析(34) Peer #peer chaincode命令及子命令实现# Fabric 1.0源代码笔记 之 Peer #peer chaincode命令及子命令实现## 1、peer chaincode install子命令实现(安装链码)### 1.0、peer chaincode install子命令概述peer chaincode install,将链码的源码和环境封装为一个链码安装打包文件,并传输到背书节点。peer chaincode install支持如下两种方式:* 指定代码方式,peer chaincode install -n <链码名称> -v <链码版本> -p <链码路径>* 基于链码打包文件方式,peer chainc...阅读全文

博文 2018-07-23 15:34:59 Delete_88c3

接口interface

在编程语言中,方法和函数的概念需要搞清楚。函数指的是一个封装的代码块,我们可以直接调用它,并返回结果。而方法其实也是一种函数,只不过方法需要和某个对象绑定。Golang并没有类的概念,不过仍然有方法和接口这些概念。 方法 方法接收者 方法接收者是一个特殊参数,给函数指定了这个参数之后,函数就成为方法了。这个特性有点像Kotlin和C#中的扩展方法,定义了带有接收者的方法之后,接收者这个类型就好像定义了这个方法一样,我们可以直接在该类型上调用方法。这在功能上,和面向对象的概念是很类似的。 例如下面这样,定义了一个汽车结构,然后定义了一个接受者方法。然后就可以用面向对象的方式来调用这个方法了。 func Method() { //方法接收者 car := Car{id: 1} car.beep(...阅读全文

博文 2018-12-28 12:34:43 陈卧虫

golang channel通讯

基于channel的通讯,对于无缓存的channel 发送的成功之时,接收者已经收到了。 接收,发生在发送者成功之前。 为什么会这样呢,如果我们靠记忆,就会怎么样,终究没有忘记快。可是如果我们能够从原理上来理解,也许就不容易忘记了。Golang的协程是协作式的,所以呢,如果发送者发送,那接收者存在一个何时运行的问题,如果发送成功之后,接收者才运行,不是说不可以,总少了那么一点点的协同的味道了。所以,如果换你来实现,一定也是发送者发送,送到接收者,唤起接收者运行(这时,发送者挂起了),然后到发送者重新回来运行的时候,接收者已经接收到了。 再扩展一下,对于带缓存的怎么办呢?这时候,其实就要看是谁,在什么 情况下阻塞了。总之,不能够自己一直运行下去,得给对方(你亲爱的合作方)运行的机会...阅读全文

Golang学习笔记 方法和接口

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/u011054333/article/details/76650083 在编程语言中,方法和函数的概念需要搞清楚。函数指的是一个封装的代码块,我们可以直接调用它,并返回结果。而方法其实也是一种函数,只不过方法需要和某个对象绑定。Golang并没有类的概念,不过仍然有方法和接口这些概念。 方法 方法接收者 方法接收者是一个特殊参数,给函数指定了这个参数之后,函数就成为方法了。这个特性有点像Kotlin和C#中的扩展方法,定义了带有接收者的方法之后,接收者这个类型就好像定义了这个方法一样,我们可以直接在该类型上调用方法。这在功能上,和面向对象的概念是很类似的。 例如下面这样,定义了一个汽车结构,然后定义了...阅读全文

博文 2019-04-29 07:31:37 u011054333

golang中compress/lzw包

lzw包中提供压缩和解压两种操作 函数列表: func NewReader(r io.Reader, order Order, litWidth int) io.ReadCloser func NewWriter(w io.Writer, order Order, litWidth int) io.WriterCloser (1)压缩 func NewWriter(w io.Writer, order Order, litWidth int) io.WriterCloser 参数列表: 1)w 输出压缩数据的io.Wrier 2)order lzw数据流的位顺序,有LSB和MSB 3)litWidth 字面码的位数,必须在[2,8]范围内,一般位8 返回值:一个io.WriteCloser,...阅读全文

博文 2018-12-07 16:34:51 laijh

Go语言实战笔记(九)| Go 接口

《Go语言实战》读书笔记,未完待续,欢迎扫码关注公众号flysnow_org,第一时间看后续笔记。 接口是一种约定,它是一个抽象的类型,和我们见到的具体的类型如int、map、slice等不一样。具体的类型,我们可以知道它是什么,并且可以知道可以用它做什么;但是接口不一样,接口是抽象的,它只有一组接口方法,我们并不知道它的内部实现,所以我们不知道接口是什么,但是我们知道可以利用它提供的方法做什么。 抽象就是接口的优势,它不用和具体的实现细节绑定在一起,我们只需定义接口,告诉编码人员它可以做什么,这样我们可以把具体实现分开,这样编码就会更加灵活方面,适应能力也会非常强。 func main() { var b bytes.Buffer fmt.Fprint(&b,"Hello World") ...阅读全文

博文 2017-04-10 02:23:24 飞雪无情flysnow_org

分享一个让我进入阿里中间件的个人项目

作者: vangoleo官网: http://www.vangoleo.com/iris-java/ 背景 时光荏苒,进入阿里中间件团队已经快两年时间了。这期间,有幸参与了第四届中间件性能挑战赛的题目组,筹备了以“Dubbo Mesh”为主题的初赛题;和团队一起开展了Dubbo线下meetup活动;将阿里多年双11积累的中间件基础设施最佳实践和方法论,通过阿里云的商业化产品,为广大开发者和企业提供服务。很庆幸能有这样一段难忘的经历。回想起来,能进入中间件团队,和我当初的一个Github项目还有关系。今天把该项目分享给大家。 Q: 什么是中间件团队?A: 阿里巴巴中间件技术部,是世界顶尖的Java技术团队之一,起源于淘宝平台架构组,是跟随着阿里电商业务和双十一成长起来的技术团队,解决复杂的业务...阅读全文

博文 2019-11-12 10:02:43 vangoleo

简明笔记:指针传递和值传递

# 简明笔记:指针传递和值传递 值传递,拷贝一份值接收者的副本。指针传递,则直接指向值接收者。 一个超级简单的列子: ```go package main import ( "fmt" ) type myself struct { name string } func (u myself) self_change_name(name string){ // 注意: 这里是拷贝一份 myself u.name = name fmt.Println(u.name) } func (u *myself) police_station_change_name(name string){ //指向myself u.name = name } func main() { ms := myself{"Po...阅读全文

博文 2019-05-04 14:20:17 faceNL

6、 reactor

Reactor 简介 前面提到的 RxJava 库是 JVM 上反应式编程的先驱,也是反应式流规范的基础。RxJava 2 在 RxJava 的基础上做了很多的更新。不过 RxJava 库也有其不足的地方。RxJava 产生于反应式流规范之前,虽然可以和反应式流的接口进行转换,但是由于底层实现的原因,使用起来并不是很直观。RxJava 2 在设计和实现时考虑到了与规范的整合,不过为了保持与 RxJava 的兼容性,很多地方在使用时也并不直观。Reactor 则是完全基于反应式流规范设计和实现的库,没有 RxJava 那样的历史包袱,在使用上更加的直观易懂。Reactor 也是 Spring 5 中反应式编程的基础。学习和掌握 Reactor 可以更好地理解 Spring 5 中的相关概念。 ...阅读全文

博文 2018-10-15 08:34:37 lesline

Golang从入门到精通(十一):Golang方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiangxianghehe/article/details/78790601 方法 在 Go 语言中有一个概念和函数极其相似,叫做方法 。Go 语言的方法其实是作用在接收者(receiver)上的一个函数,接收者是某种非内置类型的变量。因此方法是一种特殊类型的函数。 接收者类型可以是(几乎)任何类型,不仅仅是结构体类型:任何类型都可以有方法,甚至可以是函数类型,可以是 int、bool、string 或数组的别名类型。但是接收者不能是一个接口类型。 方法的声明和普通函数的声明类似,只是在函数名称前面多了一个参数,这个参数把这个方法绑定到这个参数对应的类型上。 和函数关系 方法是特殊的函数,定义...阅读全文

博文 2018-12-06 19:31:34 xiangxianghehe

[译] Go:方法接收者应该使用 T 还是 *T

文地址:dave.cheney.net/2016/03/19/… 原文作者:Dave Cheney 译文地址:github.com/watermelo/d… 译者:咔叽咔叽 译者水平有限,如有翻译或理解谬误,烦请帮忙指出 这篇文章是我几天前在 Twitter 上提出的建议的延续。 在 Go 中,对于任何类型 T 都存在类型 *T,表示获取 T 类型(T 表示你声明的类型)变量的地址。例如: type T struct { a int; b bool } var t T // t's type is T var p = &t // p's type is *T 复制代码这两种类型,T 和 *T 是不同的,*T 不能替代 T(此规则是递归的,**T 会返回 *T 地址指向的值)。 你可以在任何类...阅读全文

博文 2019-08-21 13:04:16 咔叽咔叽

Golang学习笔记之错误处理error、panic (抛出错误),recover(捕获错误)

一、error 错误表示程序中出现了异常情况。Go 语言通过内置的错误接口提供了非常简单的错误处理机制。 • error类型是go语言的一种内置类型,使用的时候不用特定去import因为它本质上是一个接口 error类型是一个接口类型,这是它的定义: type error interface { Error() string } (1)一个例子理解error package main import ( "fmt" "os" ) func main() { //试图打开一个并不存在的文件,这将会返回一个error f, err := os.Open("/test.txt") if err != nil { fmt.Println(err) //no such file or directory...阅读全文

博文 2018-12-10 21:34:44 学生黄哲

Go语言实战笔记(九)| Go 接口

《Go语言实战》读书笔记,未完待续,欢迎扫码关注公众号flysnow_org,第一时间看后续笔记。 接口是一种约定,它是一个抽象的类型,和我们见到的具体的类型如int、map、slice等不一样。具体的类型,我们可以知道它是什么,并且可以知道可以用它做什么;但是接口不一样,接口是抽象的,它只有一组接口方法,我们并不知道它的内部实现,所以我们不知道接口是什么,但是我们知道可以利用它提供的方法做什么。 抽象就是接口的优势,它不用和具体的实现细节绑定在一起,我们只需定义接口,告诉编码人员它可以做什么,这样我们可以把具体实现分开,这样编码就会更加灵活方面,适应能力也会非常强。 12345func main() { var b bytes.Buffer fmt.Fprint(&b,"Hello Wor...阅读全文

博文 2017-08-25 07:47:02 飞雪无情

golang main 和 init,函数和方法

在golang中有两个特殊的函数,main函数和init函数,main函数不用介绍在所有语言中都一样,它作为一个程序的入口,只能有一个。init函数在每个package是可选的,可有可无,甚至可以有多个(但是强烈建议一个package中一个init函数),init函数在你导入该package时程序会自动调用init函数,所以init函数不用我们手动调用,l另外它只会被调用一次,因为当一个package被多次引用时,它只会被导入一次。 package mypackage import ( "fmt" ) var I int func init() { I = 0 fmt.Println("Call mypackage init1") } func init() { I = 1 fmt.Prin...阅读全文

博文 2018-07-20 00:30:00 huangliang-hb

go语言-常见并发模式

生产者-消费者模型并发编程中最常见的例子就是生产者/消费者模型,该模型主要通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。简单的说,就是生产者生产一些数据,然后放到队列中,同时消费者从队列中来取这些数据。这样就让生产和消费变成了异步的两个过程。当队列中没有数据是,消费者就进入饥饿的等待中;而当对立中数据已满时,生产者则面临产品积压导致CPU被剥夺的问题。//生产者 func Producer(factor int, out chan <- int) { for i := 0; ; i++ { out <- i * factor } } //消费者 func Consumer(in <- chan int) { for v := range in { fmt.Println...阅读全文

博文 2020-03-15 16:33:17 guoguocto

golang-操作不同状态的chan会引起状态总结

panic: 向已经关闭的通道写数据会导致panic。 重复关闭通道会导致panic 死锁 fatal error: all goroutines are asleep - deadlock! 无缓冲通道:需要同时有提供者(chan <- ) 和消费者(<-chan),假如有一方不同时存在,就会死锁. 有缓冲通道:通道缓冲区已满,并且还有goroutine向通道写(chan <- ),但是没有goroutine 读通道(<-chan)到导致死锁. 有缓冲通道:通道内无数据,并且没有goroutine向通道写,但是还有goroutine 读通道(<-chan)道会导致死锁. 阻塞 向未初始化的通道写数据或读写数据会导致当前goroutine的永久阻塞 消费者存在情况下,提供者向缓冲区已满的通道...阅读全文

博文 2020-04-03 20:32:59 崔天浩

go中方法的接收者是值或者指针有什么区别吗?

参考文章:http://studygolang.com/articles/1113 希望解决的问题如下 假设有两个方法,一个方法的接收者是指针类型,一个方法的接收者是值类型,那么: 对于值类型的变量和指针类型的变量,这两个方法有什么区别?如果这两个方法是为了实现一个接口,那么这两个方法都可以调用吗?如果方法是嵌入到其他结构体中的,那么上面两种情况又是怎样的? 值类型的变量和指针类型的变量 先声明一个结构体: type T struct { Name string } func (t T) M1() { t.Name = "name1" } func (t *T) M2() { t.Name = "name2" } M1() 的接收者是值类型 T, M2() 的接收者是值类型 *T , 两个方...阅读全文

博文 2016-09-07 17:00:07 qq_35902556

golang 基础(29) 接口

square-gopher.png 在 go 语言接口更重视使用者,使用者是否承认和使用接口才是重要的,这里定义 Retriever 接口提供 Get 方法,所有具有 Get 方法的都可以认为是接口 package main import ( "fmt" "com.zidea/util/mock" ) type Retriever interface{ Get(url string) string } func download(r Retriever) string { return r.Get("www.baidu.com") } func main() { var r Retriever r = mock.Retriever{"this is fake baidu com"} fmt....阅读全文

博文 2019-04-03 08:34:39 zidea

Golang学习 - io/ioutil 包

// Discard 是一个 io.Writer 接口,调用它的 Write 方法将不做任何事情 // 并且始终成功返回。 var Discard io.Writer = devNull(0) // ReadAll 读取 r 中的所有数据,返回读取的数据和遇到的错误。 // 如果读取成功,则 err 返回 nil,而不是 EOF,因为 ReadAll 定义为读取 // 所有数据,所以不会把 EOF 当做错误处理。 func ReadAll(r io.Reader) ([]byte, error) // ReadFile 读取文件中的所有数据,返回读取的数据和遇到的错误。 // 如果读取成功,则 err 返回 nil,而不是 EOF func ReadFile(filename string)...阅读全文

博文 2019-04-19 18:34:41 佛心看世界

kingshard SQL黑名单功能介绍

kingshard SQL黑名单功能介绍 1. 应用场景介绍 在kingshard开源之后,有用户多次提到能不能在kingshard中加入SQL黑名单机制,让kingshard能够根据特定的规则来拦截在黑名单中的SQL。有几个比较典型的应用场景: DBA定义一些比较危险的SQL,放在SQL黑名单文件中。可以避免前端应用发过来的SQL对数据库造成危害。这种SQL有可能是开发者粗心编写的,也有可能是被SQL注入生成的SQL。例如:delete from mytable,这种不带where条件的SQL,会把整个表删除。 在kingshard项目上线后,通过log发现存在大量某条SQL给DB造成了很大的压力。这时候可以动态地将这条SQL加入黑名单,阻止该SQL的执行,从而使数据库压力降低。例如:se...阅读全文

博文 2017-02-09 08:11:01 flike

go中方法的接收者是值或者指针有什么区别吗?

参考文章:http://studygolang.com/articles/1113 希望解决的问题如下 假设有两个方法,一个方法的接收者是指针类型,一个方法的接收者是值类型,那么: 对于值类型的变量和指针类型的变量,这两个方法有什么区别?如果这两个方法是为了实现一个接口,那么这两个方法都可以调用吗?如果方法是嵌入到其他结构体中的,那么上面两种情况又是怎样的? 值类型的变量和指针类型的变量 先声明一个结构体: type T struct { Name string } func (t T) M1() { t.Name = "name1" } func (t *T) M2() { t.Name = "name2" } M1() 的接收者是值类型 T, M2() 的接收者是值类型 *T , 两个方...阅读全文

博文 2016-09-08 05:00:02 qq_35902556

Hyperledger Fabric 1.3 特性调研之Identity Mixer(一)

Idemix(Identity Mixer)是一套协议加密组件,提供更强大的身份验证和隐私保护特性。 适用场景 用户发送交易时,需要隐藏自己的身份信息,并且不希望其他人通过追踪交易记录查找到自己发送的交易。即用户的保密要求比较严格,具体为用户在需要以下保密要求时,建议使用该功能: 匿名性(anonymity):不暴露交易者的身份; 无关联性(unlinkability):无法通过多个交易确定发送者身份,即一个身份发送多条交易不会暴露这些交易来自相同的身份。 原理 发行方(issuer)颁发给用户证书,认证用户的一些属性。 用户生成ZKP(zero-knowledge proof),证明自己拥有该证书,并选择性地暴露自己的部分属性;将此ZKP发送给验证方(verifier)即可。 具体在Fab...阅读全文

博文 2019-07-03 17:35:19 RaeSnow

golang模拟带超时的信号量

最近写项目,需要用到信号量等待一些资源完成,但是最多等待N毫秒。 在C语言里,有如下的API来实现带超时的信号量等待: C 12345 SYNOPSIS #include int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime); 然后在查看golang的document后,发现golang里并没有实现带超时的信号量,官方文档在这里。 原理 我的业务场景是这样的:我有一个缓存字典,当多个用户请求1个不存在的key时,只有1个请求会穿透到后端,而所有用户都要排队等这个请求完成,或者超时返回。 怎么实现呢?其实稍微想一想c...阅读全文

博文 2017-09-30 09:21:19 鱼儿的博客

知识更新越来越快,但是学习起来越来越困

我是一个着迷于产品和运营的技术人,乐于跨界的终身学习者。欢迎关注我的个人公众号「跨界架构师」 每周五11:45 按时送达~ 我的第「140」篇原创敬上 ​大家好,我是Z哥,先祝大家节日快乐。不知道这个假期你打算出门吗?Z哥我是打算不出远门了,怕死,哈哈。索性好好宅家里学习,强化一下自己。相信大家也感受到了,随着互联网加速了信息的流动速度,知识的更新迭代也在加速。可能原本靠着一门手艺可以过一辈子,现在可能每5~10年就需要一次大的迭代才能跟上社会的发展步伐,不被out。并且,随着最近几年知识付费的兴起,提倡「终身学习」的声音越来越大了。不管是出于什么目的在鼓吹「终身学习」,这个观点的价值取向总是正向的。但是对于学习这个问题,困扰我们大部分人的并不是学什么或者怎么学。而是,总是学着学着没动力,半...阅读全文

博文 2020-05-02 23:33:11 跨界架构师

Go面试必考题目之method篇

  在Go的类方法中,分为值接收者方法和指针接收者方法,对于刚开始接触Go的同学来说,有时对Go的方法会感到困惑。下面我们结合题目来学习Go的方法。  为了方便叙述,下文描述的值接收者方法简写为值方法,指针接收者方法简写为指针方法。  下面代码中,哪段编号的代码会报错?具体报什么错误?```Gotype Animal interface { Bark()}type Dog struct {}func (d Dog) Bark() { fmt.Println("dog")}type Cat struct {}func (c *Cat) Bark() { fmt.Println("cat")}func Bark(a Animal) { ...阅读全文

博文 2019-05-23 07:34:41 deletelazy

【运维经】第8章——go get 加速

运维经--目录 go get加速 近几期一直在讲加速,今天该轮到golang了,因为 Go 1.13 将 GOPROXY 默认成了中国大陆无法访问的 https://proxy.golang.org ,所以我们国内的开发者以后必须先修改 GOPROXY 才能正常使用 go 来开发应用了。好在七牛提供了国内代理。 设置环境变量,修改GOPROXY: export GOPROXY=https://goproxy.cn 阿里源 go env -w GO111MODULE=on go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direc...阅读全文

博文 2020-04-13 08:32:40 夏洛克

【go共识算法】-Raft

介绍 Raft 状态 一个 Raft 集群包含若干个服务器节点;通常是 5 个,这允许整个系统容忍 2 个节点的失效,每个节点处于以下三种状态之一: follower :所有结点都以 follower 的状态开始。如果没收到 leader消息则会变成 candidate状态。 candidate:会向其他结点“拉选票”,如果得到大部分的票则成为leader。这个过程就叫做Leader选举(Leader Election)。 leader:所有对系统的修改都会先经过leader。 Raft 一致性算法 Raft通过选出一个leader来简化日志副本的管理,例如,日志项(log entry)只允许从leader流向follower。 基于leader的方法,Raft算法可以分解成三个子问题: L...阅读全文

博文 2018-10-10 20:34:39 jincheng828

【Go语言】【11】GO语言的包和函数

还记得《【2】Sublime配置GO开发环境》的入门例子吗?当然不记得了:) 这篇文章距离上篇时间太久远了,遥远的我都快忘记了。还是把截图贴上吧该例子中的func main()表示这是一个名称叫main的方法,而package main表示这个方法在main包内,这两部分的内容就是本节要分享的知识。这么简单?是的,简单而不简约,呵呵,接着往下看! 开发一个应用系统,考虑到代码的可读性,往往会把代码拆分到不同的包,再给包起一个好记的名字,这样一眼就能明白该包的用途,比如math包,这个就是Go语言本身的数学相关包,该包下面有求绝对值的源文件abs.go,还有求正弦的asin.go等...... 1、那么什么是包?先看个例子: 在E:\GO\workspace\pwm\src\util下创建一个...阅读全文

博文 2017-02-09 15:59:35 qingkechina

golang 接口

1、自定义类型存入接口的内存布局 接口值是一个两个字节长度数据结构,第一个字节包含一个指向内部表的指针(iTable),包含了存储的值的类型信息及和这个值判刑的一组方法。第二个字节指向所存储值的指针。如果将指针赋值给接口,则类信息会存储一个指向保存的类型的指针,接口的第二个字节依旧保存指向实体值的指针。(图B) 图A 图B 2、方法接收者(方法集) 自定义类型 T 的值的指针(t *T)的方法集,由接收者为 T 和 *T 的组成,如果在指针上调用一个接受值类型的方法,go会自动将该指针解引用,并将指针所指的底层值作为方法的接收者 自定义类型 T 的值(t T)的方法集,由接收者为 T的组成。如果我们只有一个值 T,仍然可以调用一个接收者为指针类型的方法,这可以借助于go语言传值的地址的能力实...阅读全文

博文 2018-08-13 16:31:32 convict_eva

新人好迷惑。关于方法中的指针接收者的问题。

type Point struct { x,y int } func main(){ p:=&Point{2,4} p.double()//可以 (*p).double()//可以 (&Point{2,4}).double()//可以 (Point{2,4}).double()//报错 } func (p *Point)double()int{ return p.x+p.y } 编译报错无法获得Point类型字面量的地址。 不明白为什么手动加了&就可以了呢?我看教程上面的解释是无法获取临时变量的地址。 但&不就是取地址操作吗?为什么对Point类型字面量手动取地址就可以调用它的方...阅读全文

Go语言的类型系统

Go语言允许用户定义类型。当用户声明一个类型时,这个声明就给编译器提供了一个框架,告知必要的内存大小和信息。 声明结构类型 type user struct { name string email string } 上述代码声明的结构类型有2个字段,每个字段都基于一个内置类型。一旦声明了类型,就可以使用这个类型创建值。 使用结构类型声明变量 var zuckjet user 我们用关键字var创建了类型为user且名为zuckjet的变量。当声明变量时,这个变量对应的值总是会被初始化。这个值要么是用指定的值初始化,要么用零值来初始化。对数值来类型来说,零值是0;对字符串来说,零值是空字符串。下面我们来看一下如何声明一个user类型的变量,并使用某个非零值作为初始值。 zuckberg := ...阅读全文

博文 2018-07-31 18:34:47 大猪熬药

兄弟连区块链教程Fabric1.0源代码分析Peer peer chaincode命令及子命令实现

兄弟连区块链教程Fabric1.0源代码分析Peer peer chaincode命令及子命令实现,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。# Fabric 1.0源代码笔记 之 Peer #peer chaincode命令及子命令实现## 1、peer chaincode install子命令实现(安装链码)### 1.0、peer chaincode install子命令概述peer chaincode install,将链码的源码和环境封装为一个链码安装打包文件,并传输到背书节点。peer chaincode install支持如下两种方式:* 指...阅读全文

博文 2018-11-06 19:34:39 兄弟连区块链培训

go中方法的接收者是值或者指针有什么区别吗?

参考文章:http://studygolang.com/articles/1113 希望解决的问题如下 假设有两个方法,一个方法的接收者是指针类型,一个方法的接收者是值类型,那么: 对于值类型的变量和指针类型的变量,这两个方法有什么区别?如果这两个方法是为了实现一个接口,那么这两个方法都可以调用吗?如果方法是嵌入到其他结构体中的,那么上面两种情况又是怎样的? 值类型的变量和指针类型的变量 先声明一个结构体: type T struct { Name string } func (t T) M1() { t.Name = "name1" } func (t *T) M2() { t.Name = "name2" } M1() 的接收者是值类型 T, M2() 的接收者是值类型 *T , 两个方...阅读全文

博文 2016-10-27 10:00:03 qq_35902556

Golang语言中的method是什么

什么是method(方法)?method是函数的另外一种形态,隶属于某个类型的方法。method的语法:func (r Receiver) funcName (parameters) (result)。receiver可以看作是method的第一个参数,method并且支持继承和重写。 ``` /** * 什么是method(方法)?method是函数的另外一种形态,隶属于某个类型的方法。 * method的语法:func (r Receiver) funcName (parameters) (result)。 * receiver可以看作是method的第一个参数,method并且支持继承和重写。 */ package main import ( "fmt" ) type Human st...阅读全文

博文 2019-04-29 16:37:40 frankphper

阿里云移动数据分析服务使用教程

课程介绍 移动数据分析 (Mobile Analytics) 是阿里云推出的一款移动App数据统计分析产品,为开发者提供一站式数据化运营服务:通用的多维度用户行为分析、数据开放并支持自定义分析、数据无缝对接其他数据应用产品,助力移动开发者实现基于大数据技术的精细化运营、提升产品质量和体验、增强用户黏性。 产品详情:https://www.aliyun.com/product/man/ 课时列表 • 课时1:开通服务及创建应用 • 课时2:集成SDK及初始化应用 • 课时3:页面及自定义事件埋点 • 课时4:业务分析报表 • 课时5:数据自定义分析 开始学习http://click.aliyun.com/m/27867/ ...阅读全文

区块链开发者教程大汇总,Php/Python/C#/Node/Go

Mixin Network是一个免费,1秒确认的高速转账网络。我们撰写了基于多种语言的系列教程,开发者可以15分钟搭建一个比特币收款应用。 教程 PHP Go Node.js C# Python 创建机器人接收发送消息 php 1 Go 1 Node.js 1 C# 1 python 1 机器人接收发送比特币 php 2 Go 2 Node.js 2 C# 2 python 2 创建比特币钱包,转账 php 3 Go 3 Node.js 3 C# 3 python 3 买卖比特币 php 4 Go 4 Node.js 4 C# 4 Mixin Network开发者资料汇...阅读全文

博文 2019-04-12 14:34:44 Mixin_Network

观察者模式实战

本文转自“雨夜随笔”公众号,欢迎关注。 在上一篇文章中,我们简单了讲了一下设计模式和观察者模式。那么这次让我们详细了解一下观察者模式和我们如何进行使用。 内容 还记得上一篇文章中,我们说过了解或者设计一个设计模式的时候,要按照下面四点进行分析: image.png 意图 在实际业务场景中,我们经常遇到这样的稳定,也就是在某个对象发生某种事件时,通知其他相关的对象。所以观察者模式就允许你定义一种订阅机制,使得订阅某种事件的对象能够在事件发生时得到通知。 动机 我们来分析一种常见的业务场景,也就是购物APP中经常遇到的货物上架提醒,如果为了实现这种需求,我们可以按照下面的方式来实现: 成本最低:我们知道在开发中成本最低的就是不做这个需求,当然这个是开玩笑,不过一般在开发初期,我们可能会分析需求的...阅读全文

博文 2020-05-03 12:32:44 soolaugust