工程进阶 | 青训营笔记
并发与并行
并发:
并行:
Go可以充分发挥多核优势,高效运行。
Go语言并发模型
- Goroutinue 模型
- CSP模型(Comunicating Sequential Processes)
-
Channel 模型
- 无缓冲通道 make(chan int) 有收有放才能恢复
- 有缓冲通道 make(chan int,2) 通道为空时取阻塞直至通道不为空恢复 通道满的时候放阻塞直至通道有位置恢复
- 互斥锁 Lock
- WaitGroup
依赖管理
版本一 GOPATH
代码直接依赖 $gopath/src 内的东西
缺点:没法实现package的多版本控制 (src只能存在一个版本的代码)
版本二 Go Vendor
增加一个vendor目录,先找vendor 再找 $GOPATH/src
缺点:
- 无法控制依赖的版本(间接依赖版本冲突,没办法默认适配)
- 更新项目又可能出现依赖冲突,导致编译出错
版本三 Go Module
- 配置文件,描述依赖 go,mod
module $MODULENAME // 模块的名称
go 1.16 //依赖go的版本
require (
github.com/aliyun/aliyun-oss-go-sdk v2.1.6+incompatible
// incompatible https://blog.csdn.net/zhang197093/article/details/126635058
github.com/aws/aws-sdk-go v1.42.27
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect
gopkg.in/ini.v1 v1.55.0 // indirect // 这个代表简介依赖
// [Module Path] [Version/Pseudo-version]
// Version 语义化版本
// ${MAJOR}.${MINOR}.${PATCH}
//Pseudo-version
//vx.0.0-yyyymmddhhmmss-abcdefgh1234
//版本号-时间戳-commithash
)
- 中心仓库管理依赖库 proxy
- 本地工具 go get/mod
测试
如何控制测试的依赖?
因为单元测试不免有外部依赖,要达成测试算法的稳定与幂等就需要引入Mock
可以利用一些库来实现Mock功能 github.com/bouk/monkey…