这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
本文是对于掘金课程的课程笔记,针对课程内容的一些重难点、本人在学习Go语言的并发特性、Go语言管理依赖与单元测试时进行的简单记录。
Go语言中的并发特性
并发是程序开发中非常重要的概念,而当我们讨论并发这个概念的时候总是逃不开进程、线程。在我以前使用JAVA的时候,实现并发编程一般是使用线程池,而在golang中则引入了goroutine这个概念,也就是协程。一般来说线程的量级为MB级别,而协程仅仅只有KB。
在实际使用的过程中,我们有若干种方式实现并发编程:goroutine,CSP,Channel,并发安全lock,waitgroup等。 使用简单的go func的时候,我们会发现输出的顺序不固定的,如下图所示,这说明这时候其实程序是并行运行的。
我们也可以使用waitgroup来实现并发编程,如下图所示
使用Go语言进行简单的单元测试
不同的语言有不同的命名规则,在Golang中我们一般测试文件一般以_test.go结尾,函数命名为func TestXXX().如下图所示,测试的内容为函数HelloTom()的返回值是否为Tom。
可以看到这里面我们使用了github上面的assert包,我们是无法直接使用这个包的,这里我们就需要使用go mod功能。
Golang中依赖管理具有三要素:
- 配置文件,描述依赖(go mod);
- 中心仓库管理管理依赖库(proxy);
- 本地工具(go get)
我们直接在想要创建项目的根目录调用命令行,进行go mod init,就会生成go.mod文件,随后使用go get命令即可获取所需的包,如下图所示:
随后我们就可以在项目中使用这个github里的assert包了。
在实际应用中,还有个命令我们需要时常关注,那就是go mod tidy,这个命令主要有两个功能:
- 引用项目需要的依赖增加到go.mod文件
- 去掉go.mod文件中项目不需要的依赖