1.1 Go 解决现代编程的难题
1.1.1 开发速度
更加智能的编译器,简化依赖算法,编译速度更快,只会关注直接被引用的库
编译器提供类型检查
1.1.2 并发
提供并发支持,goroutine比线程更轻量级的并发,内置channel,在不同goroutine之间通信
1.goroutine
goroutine是可以和其他goroutine并行执行的函数,使用的内存更少。运行时会自动的配置一组逻辑处理器执行goroutine,每个逻辑处理器绑定到一个操作系统线程上,程序实行效率更高1
2
3
4func log(msg string) {
....
}
go log("blablabla")
2.channel
channel是可以让goroutine之间进行安全通信的工具,避免共享内存访问的问题,保证同一时刻只会有一个goroutine修改数据, 但是channel并不提供跨goroutine的数据访问保护机制,
如果传输的是副本,那么每个goroutine都持有一个副本,各自对副本修改是安全的。但是如果传输的诗指针时,还是需要额外的同步动作
1.1.3 Go语言的类型系统
无继承,使用组合设计模式,具有接口机制对行为进行建模
1. 类型简单
内置简单类型,支持自定义类型,使用组合来支持扩展
2.Go接口对一组行为建模
一个类型实现了一个接口的所有方法,那么这个类型的实例就可以存储在这个接口类型的实例中,不需要额外声明
Go语言的整个网络库都是用了io.Reader接口,这样可以将程序的功能和不同的网络实现分离,任何实现了open方法的类型,都实现了io.Reader接口1
2
3
4//io.Reader
type Reader interface{
Read(p []byte) (n int, err error)
}
1.1.3 内存管理
Golang提供GC
1.2 Hello Go
1 | package main |
Go Playground是提供在线编辑运行Go的网站