这是我参与「第五届青训营 」伴学笔记创作活动的第2天
本堂课重点内容
详细知识点介绍
Goroutine
Go使用协程来实现并发,协程实现被称之为 goroutine,由 Go 运行时管理
Go协程的调度是由Go语言运行时自动管理的,而不是由操作系统内核调度的。这意味着,Go协程可以在不切换内核线程的情况下切换,从而避免了线程切换带来的开销。
其次,Go协程是协作式多任务,而不是抢占式多任务。这意味着,在Go语言中,协程之间是通过让出时间片的方式来协作的,而不是通过抢占处理器的方式。这使得Go协程在多个协程之间切换时,更加高效。
最后,Go协程是非常轻量级的。在Go语言中,创建一个新的协程只需要2kb左右的的内存空间,而传统的线程通常需要几兆的内存空间。这使得Go协程可以创建成千上万个,而不会对系统带来太大的负担。
go 启动协程的方式就是使用关键字 go,后面一般接一个函数
channel
Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication)。 它的操作符是箭头 <- 。
提倡通过通信共享内存而不是通过共享内存而实现通信
依赖管理
go module
Go Modules 是Go语言官方推出的依赖管理系统,解决了之前依赖管理系统存在的诸如无法依赖同一个库的多个版本等问题,go module从Go 1.11 开始实验性引入,Go 1.16 默认开启
依赖管理三要素
- 配置文件
- 中心仓库
- 本地工具
测试
单元测试
测试规则
- 测试文件以
_test.go结尾 - func TestXxx(t *testing.T )
- 初始化逻辑放在TestMain中