这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记
语言进阶
并发编程基础
1. goruntine
协程(轻量级线程)通过 go 关键词使用,如下
go func()
2. CSP(Communicating Sequential Processes)
Do not communicate by sharing memory; instead, share memory by communicating.
不要通过共享内存来通信,而要通过通信来实现内存共享。
这就是 Go 的并发哲学,它依赖 CSP 模型,基于 channel 实现。
3. channel
Go 语言的特色之处,分为无缓冲和有缓存通道两种
make(chan, int)
make(chan, int, 2)
应用:
-
停止信号
-
定时任务
-
解耦生产者和消费者
-
控制并发数
4. 并发安全
Lock
WaitGroup()
依赖管理
1. 配置文件
go.mod go mod init
2. 中心仓库管理依赖库
GOPROXY=goproxy.cn,direct
3. 本地工具
go get/mod
测试
1. 单元测试
规范
-
文件规范 所有的测试文件以 _test.go 结尾
-
函数名规范
func Test***(***testing.T)
- 初始化逻辑放入 TestMain 中
func TestMain(m *testing.M) {
//测试前:数据装载,配置初始化等前置工作
code := m.Run()
//测试后:释放资源等收尾工作
os.Exit(code)
}
覆盖率 Tips:
- 一般覆盖率: 50% - 60%, 较高覆盖率 80%。
- 测试分支相互独立、全面覆盖 +测试单元粒度足够小,函数单一职责
依赖
稳定,幂等
2. Mock
打桩
不依赖数据库、本地文件等等,
防止由于非函数或者代码问题出现的非幂等现象
3.基准测试
ps:fastrand 和 rand 函数, rand 在高并发场景下由于加锁问题导致性能表现问题