这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
Go语言进阶、依赖、单元测试
Goroutine
- 使用go关键字可以开启一个协程来运行任务,协程是用户态的。
go func()
这样就可以创建一个协程来运行任务,速度非常快,在高并发场景下非常适用。
CSP
- GO语言不采用临界区作为协程间的通讯,而是通过信道来实现通讯。
Channel
- Channel作为通讯的主要管道,他可以用make关键字进行创建,可以指定缓冲区大小,也可以不指定。
//无缓冲区
make(chan int)
//有缓冲区
make(chan int,3)
并发安全lock
- 可以使用sync包下的Mutex来对资源进行加锁操作,以便于并发场景下可以保证数据安全性
lock sync.Mutex
//加锁使用
lock.lock()
//关闭锁
lock.unlock()
WaitGroup
- 在开启多个协程的情况下,可以使用WaitGroup结构体里面的方法对于协程进行计数
依赖管理
- 依赖管理三要素
使用go get命令从仓库获取依赖
go.mod里面有三个部分
第一个是模块部分,第二个是go语言的原生版本,第三个是你引入的包
单元测试
- 代码测试是非常重要的一个部分,如果不进行测试或者测试很少的话,可能项目上线后会出bug,造成重大损失。所有代码测试文件都以_test.go结尾,函数命名规则为func TestXxx(t *testing.T),初始化逻辑放到TestMain()中。
Mock
Mock函数可以为一个方法打桩,为一个函数打桩。
应用场景为,你想进行单元测试的时候,你要的文件或数据被别人删除了,这时候你的代码正常测试是肯定通过不了,那你就可以mock你获取数据的函数,给他打个桩,替换成一个可以返回你要的数据的函数,这样可以不用改代码就可以进行测试。