这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天。
今天按照课表学习了Go 语言进阶与依赖管理及Go 语言工程实践之测试这两节课。
一、本堂课重点内容:
1.并发与并行
2.通道
3.并发安全Lock
4.依赖管理(GOPATH, GO Vendor, Go Module)
5.测试(单元测试)
二、详细知识点介绍:
1.并发与并行
Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可。
goroutine 语法格式:
go 函数名( 参数列表 )
例如:
func work(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}
func main() {
go work("world")
work("hello")
}
执行以上代码,你会看到输出的 hello 和 world 是没有固定先后顺序。因为它们是两个 goroutine 在执行.
2.通道
通道可用于两个 goroutine 之间通过传递一个指定类型的值来同步运行和通讯。操作符 <- 用于指定通道的方向,发送或接收。
由以上程序可见通道是具有顺序性的。
通道缓冲区
通道可以设置缓冲区,通过 make 的第二个参数指定缓冲区大小:
ch := make(chan int, 2)
有缓冲区的通道允许发送端的数据发送和接收端的数据获取处于异步状态,但缓冲区一满,数据发送端就无法再发送数据了。 可以通过range关键字来遍历通道,如果通道用完时就可以使用 close() 函数来关闭。
3.并发安全Lock
开启锁后我们就可以保证数据的安全了。
var lock sync.Mutex
lock.Lock()
...
lock.Unlock()
4.测试
学习了单元测试的方法, 了解了单元测试需要做什么。(覆盖率)
四、引用参考:
课件: Go 语言入门 - 工程实践 .pptx - 飞书云文档 (feishu.cn)