这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天。下面是我学习Go 语言工程进阶这一节课所记录的一些知识点。
Go语言并发
Goroutine
由于Go语言能充分利用多核心处理器,使其可以充分发挥处理器的优势,各个线程可以运行多个协程,将使用栈的大小降到Kb级别,使其处理并发效率大大提升。
Channel
Go语言的管道提倡用管道共享内存。 Go语言中创建管道的方式为make(chan 类型, [缓冲大小]),其中可以自行定义其是否为缓冲管道。Go语言中的管道可以保证子协程有序进行。
Sync
WaitGroup采用计数器的方式,当计数器为零时开启主线程的阻塞,而不用等到结束后再使用time.sleep()来结束进程。
Go语言依赖管理
Go语言的依赖管理主要有三要素:配置文件依赖(go.mod)、中心仓库管理依赖库(Proxy)、本地工具(go get/mod)。值得注意的是在有间接依赖存在的情况下一般会选择最低满足兼容的版本。
Go语言测试
单元测试
在Go语言中所有的测试文件都以_test.go为结尾,可以使用开源的assert测试比较测试以及预期结果是否有差别。
单元测试中还可以查看被测试代码的覆盖率,可以通过改进测试的参数来尽可能提高测试代码的覆盖率,覆盖率较好的测试代码可以达到80%+。
Mock测试
若测试代码依赖外部文件,可使用Mock函数对文件进行打桩,防止因为外部文件被篡改而导致在测试时得不到正确的测试结果码。
基准测试
基准测试是为了优化一段程序代码运行时所占用的性能以及消耗CPU的程度,而Go语言也提供了基准测试的框架方便优化代码。