这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
一、并发编程
-
并发与并行
- 并发:多个程序一起在单核CPU上,CPU轮流分配资源给程序,同一时间只能运行一个程序
- 并行:多个程序在多核CPU上,每个核专门负责一个程序,同一时间能运行多个程序
-
线程与协程
- 线程:内核态的,一个线程运行多个协程, MB级别的
- 协程:用户态的,轻量级的线程,KB级别
-
Gorontine/ Channel / Sync
二、依赖管理
-
依赖管理演进
-
GOPATH
- 依赖直接在src目录下,无法实现多版本控制
-
Go Vender
- 依赖副本放在ProjectRoot/vender下,这样可以实现同个包不同项目使用相同版本的依赖
- 但这样无法控制依赖的版本
- 更新项目时可能会出现依赖冲突,导致编译出错
-
Go Module
- 概述
- 定义版本规则和版本与项目的依赖关系
- 通过 go.mod 文件来管理依赖版本
- 通过 go get/ go mod 等指令来管理依赖包
- 使用方式
- 利用go.mod 来描述依赖
- 利用proxy建立中心仓库,放置依赖
- 利用go get/mod 作为本地工具
- 概述
-
-
go get/ go mod
-
go get
- @update 默认
- @none 删除依赖
- @v1.12 tag版本,语义版本
- @23dfdd5 特定的commit
- @master 分支最新的commit
-
go mod
- init 初始化,建立go.mod文件
- download 将依赖从中心仓库下载到本地
- tidy 删除不需要的依赖,增加需要的依赖
-
三、测试
- 回归测试
- 集成测试
- 单元测试
-
测试的单元
- 函数
- 模块
- 其他
-
规则
- 文件以_test.go结尾
- func Testxxx(*tesing.T)
- 初始化逻辑放在TestMain中
-
要求
- 一般覆盖率为50%-60% 较高覆盖率为80%
- 各个测试分支相互独立,全面覆盖
- 测试的单元要足够小
-
四、总结
- 从这里开始,除了测试之外,和其他语言来说,相似之处不多,需要额外学习和训练