这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
第二课-Go语言进阶
- 协成:
-
- Goroutine:调用函数时+go关键字
- 协成之间通信CSP:go提倡通过通信共享内存
- 通道Channel:
-
- 有缓存通道:make(chan int)
- 无缓存通道:make(chan int,2(容量))
-
- Sys关键字
-
-
- 并发安全Lock:需注意并发安全操作
- 并发同步WaitGroup:
-
- Add:计数器+delta
- Done:计数器-1
- Wait:阻塞至计数器=0
-
- 依赖管理:
-
- GoModule
-
- go.mod文件:管理依赖包版本
- go get/go mod指令工具:管理依赖包
- 依赖管理三要素(Java-Maven)
-
- 配置文件,描述依赖-go.mod
- 中心仓库管理依赖库-Proxy
- 本地工具-go get/mod
- go get工具
-
- @update-默认
- @none-删除依赖
- @v1.1.2-tag版本,语义版本
- @23dfdd5-特定的commit
- master-分支的最新commit
- go mod工具
-
- init-创建go.mod文件
- download-下载模块到本地缓存
- tidy-增加需要的依赖,删除不需要的依赖
- 测试(输入-输出-校对):
-
- 单元测试规则:测试文件:_test.go结尾
- func TestXxx(*testing.T)
- 初始化逻辑放到TestMain中
-
- 测试前:数据装载等前置工作
- 测试后:资源释放等收尾工作
- assert包:正确性判断
- 覆盖率Tips:覆盖率越高出现Bug概率越低
- Mock函数:为一个函数/方法打桩
- 基准测试:显示程序运行的时的系统速率
-
- 优化:fastrand-提高性能,牺牲了数据的一致性
- 项目实践:话题-发帖-回帖
-
- 需求设计
-
- 社区话题页面
-
- 展示话题(标题+文字描述)和回帖列表
- 不考虑前端页面,只考虑后端数据逻辑处理
- 不使用数据库存储,使用文件存储
-
- 代码开发
- 分层结构
-
- Repository(数据层)-Model
- Server(逻辑层)-Entity
- Controller(视图层)-View
-
- 测试运行
- 单元测试
- Mock测试
- 基准测试