go语言进阶——工程进阶 | 青训营笔记

80 阅读2分钟

go语言进阶——工程进阶 | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

课程介绍

本节课将从工程实践角度,讲授在企业项目实际开发过程中的所遇的难题,重点讲解 Go 语言的进阶之路,以及在其依赖管理管理过程中如何演进。

1.语言进阶
1.1goroutine
image.png
协程:用户态,轻量级线程,栈KB级别
线程:内核态,线程跑多个协程,栈MB级别

1.2并发安全lock

image.png
1.3WaitGroup

image.png
计数器:开启协程+1;执行结束-1;主协程阻塞直到计数器为0
2.依赖管理
2.1GOPATH
bin 项目编译的二进制文件
pkg 项目编译的中间产物,加速编译
src 项目源码
弊端:场景:A和B依赖于某一package的不同版本。问题:无法实现package的多版本控制
GO Vender
项目目录下增加vender文件,所有依赖包副本形式放在vender
依赖寻址方式:vender->GOPATH
通过每个项目引入一份依赖的副本,解决多个项目余姚同一个package依赖的冲突问题。
弊端:无法控制依赖的版本,更新项目又可能出现依赖冲突,导致编译出错。
GO Moudle
通过go.mod文件管理依赖包版本
通过go mod指令工具管理依赖包
2.2依赖管理三要素
1.配置文件,描述依赖 go.mod
2.中心仓库管理依赖库 proxy
3.本地工具 mod

依赖配置——依赖图

image.png
3.测试
回归测试、集成测试、单元测试

image.png
3.1单元测试规则
1.所有测试文件以_test.go结尾
2.func TestXxx(*testing.T)
3.初始化逻辑放到TestMain中

image.png

image.png
单元测试——assert

image.png
代码覆盖率

image.png

image.png
image.png
Tips:
1.一般覆盖率:50-60%,较高的覆盖率80%+
2.测试分支互相独立、全面覆盖
3.测试单元粒度足够小,函数单一职责