BeginMan blog

go语言实战

goroutine

go 综合实力如何呢:

go = (C/C++) * 0.5
go = (Python/Ruby) * 2

go是静态语言,Python是动态语言,两个我都喜欢,动态语言没有类型安全特性,会导致一些不可控的意思,除非我们写一大堆测试套件来避免运行时出现的类型错误。go在并发上提供goroutine协程,使用通道(channel)这种数据结构在goroutine之间安全且有类型的进行同步消息。

goroutine 与主程序,与多个goroutine并行,一个线程可执行多个goroutine, 如go的 net/http库内置goroutine, 使得每接收到请求都自动在其自己的goroutine里处理。

图片来源:https://pingcap.github.io/blog/2017/09/12/futuresandgrpc/

通道这种数据结构保证了同一时刻只有一个goroutine修改数据,从而保证并发修改时的数据安全。

如上图,goroutine之间是并行的,但是传输数据是同步的,甲等乙,乙等丙,goroutine都会确认数据传输完成,这种方式不需要锁或同步机制。

composition vs inheritance

go 使用组合(composition)设计模式,只需简单地将一个类型嵌入到另一个类型,就能复用所有的功能。不同与Java, Python等使用继承(inheritance)。

关于这两者哪个好,哪个坏,我也不清楚,各有所长吧。

图片来源:《Go语言实战》

鸭子类型

Go接口可以对一组行为建模,如果一个类型的实例(inst) 实现了某个接口,则 inst可执行一组特定的行为。不需要提前声明,只要实现了就好,也就是说一个字:干!。这就是所谓的鸭子类型。关于🦆鸭子类型,早之前呢就写过了鸭子类型, 并且用go,python,js都实现了下。