Go语言进阶 | 青训营笔记

107 阅读2分钟

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

一、语言进阶

1.1并发编程

并发与并行

并发:单核多程序,时间片
并行:多核多程序

go语言速度快的原因:

image.png

Goroutine

  • 协程:用户态,轻量级线程,栈KB级别。
  • 线程:内核态,线程跑多个协程,栈MB级别。(图片内容有误)

image.png

1.2 CSP

image.png

1.3Channel

1 无缓冲区:接收和发送端同步
2 有缓冲区:缓冲区未满,发送不阻塞;缓冲区未空,接收不阻塞

image.png

1.4 并发安全

多个并发体在同一段时间内访问同一个共享数据,共享数据能被正确处理。 并发不安全最典型的案例就是卖票超售,设想有一家电影院,有两个售票窗口,售票员售票时候先看一下当前剩余票数是否大于0,如果大于0则售出票。

找了一篇文章,写的是关于go并发之三种线程安全的map。 Go 并发之三种线程安全的 map - 知乎 (zhihu.com)

1.5Waitgroup

并发任务同步。

二、依赖管理

2.1 依赖管理演进

工程项目不可能基于标准库0~1编码搭建 管理依赖库

  1. gopath: 不能实现package的多版本控制

image.png 2. govender:无法控制依赖的版本

image.png

  1. gomodule:定义了版本规则和依赖关系

image.png

2.2依赖管理三要素

image.png

version

一般是 [module_path][version]形式 version一般有两种${MAJOR}.${MINOR}.${PATCH}或是vX.Y.Z-yyyymmddhhmmss-comit

indirect

对于没有直接表示的模块会在go.mod中加上// indirect,例如(A->B->C)

incompatible

  • 主版本2+模块会在模块路径增加/vN后缀
  • 对于没有go.mod文件并且主版本2+的依赖,会加上+incompatible,表示可能会存在一些不兼容的代码逻辑

image.png

依赖分发-回源

就是这个依赖要去哪里下载,如何下载的问题。

实际上是用Proxy来缓存,保证了依赖的稳定性;

依赖分发-回源

查找依赖的逻辑:如果最后都没找到就会回到第三方Direct

image.png

工具 go get

image.png

三、测试

这一块的内容软工书上讲的很清楚,不过多叙述。

image.png

3.1单元测试

单元测试的数量取决于代码的质量

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证

image.png

规则

  1. 测试文件以_test.go结尾
  2. 函数名称func TestXxxx(t *testing.T)
  3. 初始化逻辑放在TestMain(t *testing.M)

3.2单元测试-依赖

image.png

3.3mook测试

通过mock实现不对本地文件的强依赖

3.4基准测试

测试cpu损耗之类