这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记
-
协程在用户态实现,系统开销小,所以天生支持高并发。
-
提倡通过通信共享内存,也就是channel.不提倡通过共享内存通信,也就是加锁
-
有缓冲(异步)、无缓冲通道(同步),make(chan int, 2)
-
带缓存可以解决消费者消费慢的阻塞问题,即消费者消费速度慢,生产者可以不必阻塞在channel
-
不提倡通过共享内存通信,也就是加锁,不加锁不能保证并发安全
-
waitGroup实现并发同步,不用sleep。有add,done,wait三个常用函数
-
总结:goroutine,channel通信,同步
依赖管理:
-
需求:不同项目依赖版本不同,需要控制不同版本
-
GOPATH:bin项目编译二进制文件,src源码。项目代码直接依赖src源码,go get 下载到src下。无法实现包的多版本控制
-
Go Vendor: 项目下增加vendor,依赖包的副本放在这里,现在这里找,找不到再去gopath->src,解决了多个项目需要同一个包的不同版本问题。存在问题:A包含的B、C却包含了D的不同版本,不兼容
-
go module:1.11开始引入,1.16默认开启。go.mod文件管理,描述依赖。中心仓库管理依赖库proxy。本地工具 go mod/get。
-
version描述:1语义化版本:V1.3.0,V2.3.1.major,minor,patch 2基于 commit伪版本。indirect:非直接依赖。incompatible
-
常用指令 go mod init,go mod download,go mod tidy test
-
回归测试,集成测试,单元测试
-
TestMain() ,代码覆盖率--cover
-
指令:go test .\judgment_test.go .\judgment.go --cover
-
一般覆盖率50-60,较高覆盖率80+
-
单元测试要粒度小,覆盖全
-
mock 代替原函数,
-
并发测试用range,它有一个全局并发锁,在并发时性能反而差了。fastrand快了很多