Go语言进阶、依赖、单元测试 | 青训营笔记

80 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

Go语言进阶、依赖、单元测试

Goroutine


  • 使用go关键字可以开启一个协程来运行任务,协程是用户态的。

image.png

go func()

这样就可以创建一个协程来运行任务,速度非常快,在高并发场景下非常适用。

image.png

CSP


  • GO语言不采用临界区作为协程间的通讯,而是通过信道来实现通讯。

image.png

Channel

  • Channel作为通讯的主要管道,他可以用make关键字进行创建,可以指定缓冲区大小,也可以不指定。
//无缓冲区
make(chan int)
//有缓冲区
make(chan int,3)

并发安全lock


  • 可以使用sync包下的Mutex来对资源进行加锁操作,以便于并发场景下可以保证数据安全性
lock sync.Mutex

//加锁使用
lock.lock()

//关闭锁
lock.unlock()

WaitGroup


  • 在开启多个协程的情况下,可以使用WaitGroup结构体里面的方法对于协程进行计数

image.png

依赖管理


  • 依赖管理三要素

image.png

使用go get命令从仓库获取依赖

go.mod里面有三个部分

image.png

第一个是模块部分,第二个是go语言的原生版本,第三个是你引入的包

单元测试


  • 代码测试是非常重要的一个部分,如果不进行测试或者测试很少的话,可能项目上线后会出bug,造成重大损失。所有代码测试文件都以_test.go结尾,函数命名规则为func TestXxx(t *testing.T),初始化逻辑放到TestMain()中。

Mock


Mock函数可以为一个方法打桩,为一个函数打桩。

应用场景为,你想进行单元测试的时候,你要的文件或数据被别人删除了,这时候你的代码正常测试是肯定通过不了,那你就可以mock你获取数据的函数,给他打个桩,替换成一个可以返回你要的数据的函数,这样可以不用改代码就可以进行测试。

image.png