Go语言工程实践——课堂笔记 | 青训营笔记

176 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

0.1 并行和并发区别 并发:多线程程序在一个核的CPU上运行 并行:多线程程序在多个核的CPU上运行

1.1 Goroutine

  • 协程:用户态,轻量级线程,栈MB级别
  • 线程:内核态,线程跑多个协程,栈KB级别

1.2 CSP(Communicating Sequential Process)

  • 通过通信共享内存(Go提倡这个方法)
  • 通过共享内存实现通信

1.3 Channel具体操作 make(chan 元素类型,[缓冲大小]) 无缓冲通道(同步通道) make(chan int) 有缓冲通道(生产消费模型) make(chan int,2)

1.4 并发安全Lock(Sync包) 加锁

1.5 WaitGroup(Sync包) 实现并发任务同步 计数器: 开启协程+1;执行结束-1;著协诚阻塞直到计数器未0

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

2.1 Go依赖管理演进 GOPATH->GO Vendor-》Go Module 控制依赖库版本

2.1.1 GOPATH 环境变量$GOPATH 项目代码直接依赖src下的代码 go get下载最新版本的包到src目录下

2.1.1 GOPATH-弊端 场景:A和B依赖于某一个package的不同版本 问题:无法实现package多版本控制

2.1.2 Go Vendor 引入依赖的副本,优先从这获取

2.1.2 Go Vendor-弊端 无法控制依赖的版本 依赖冲突,导致编译错误

2.1.3 Go Module 通过go.mod文件管理依赖包版本 通过go get/go mod 指令工具管理依赖包

2.2依赖管理三要素 1.配置文件,描述依赖go.mod 2.中心仓库管理依赖库 proxy 3.本地工具go get/mod

image.png

2.3.2 依赖配置-version indirect 语义化版本 基于commit伪版本

2.3.4依赖配置-依赖图

image.png

2.3.5 依赖分发-回溯 不建议采用第三方托管平台管理 因此采用Go采用专门的Proxy,实现稳定可靠的依赖分发

2.3.6 依赖分发-变量 GOPROXY

image.png

2.3.7 工具-go get

image.png

2.3.8 工具-go mod 每次提交之前,执行以下go mod tidy image.png

0.3 测试

image.png

3.1.1 单元测试-规则 测试文件以_test.go结尾 func TestXxx(t *testing.T)

初始化逻辑放到TestMain中

3.1.5 单元测试-代码覆盖率 一般覆盖率50~60 测试分支相互独立/全面覆盖 测试单元粒度足够小,函数单一职责

3.2 单元测试-依赖

3.4 单元测试-Mock github.com/bouk/monkey 快速打桩

3.5基准测试及优化 github.com/bytedance/g… fastrand进行测试

项目开发和测试

ER 图 Entity Relationship Diagram

4.5 组件工具

image.png