这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记。
同步
Goroutine
go func(){}
CSP
Comunicating Sequential Processes
提倡通过通信共享内存(左)
Channel
make(chan 元素类型,缓冲大小) 无缓冲即为同步
Lock
锁内存,同时操作
lock.Lock()
lock.Unlock()
WaitGroup
暴露了三个方法
Wait()Done()Add()
依赖管理
依赖管理演进
GOPATH
Go项目工作区,直接go get包到src中
Go Vender
项目目录增加vendor文件,依赖包副本形式放在/vendor/ 无法直接映射版本
Go Module
1.16自动支持 通过go mod/go get 指令工具管理依赖包
管理三要素
- 配置文件,描述依赖
- 中心仓库管理
- 本地工具 go get/mod
go.mod
依赖管理基本单元(依赖范围)
原生库(go版本)
单元依赖(依赖包和版本依赖)
依赖配置 version
commit V...-时间戳-hash
依赖配置 indirect
非直接依赖,注释中包含indirect
依赖配置 incompatible
相当于检查,如果存在多版本 却没有指定vN文件夹,就+incompatible标识
依赖分发 回源
GOPROXY
direct如果代理没有就去源站找
go get工具
go mod工具
go mod tidy 每次运行都可以线运行一下
单元测试
回归测试 (刷一下抖音)
集成测试 对于系统功能验证 一般自动化
单元测试 开发阶段
单元测试
* 测试文件以_test.go结尾
* func TestXxx(*testing.T){}
* 初始化逻辑放到TestMain()中
assert
asset.Equals()等验证方法
覆盖率
go test judgement_test.go judment.go --cover
输出多少的代码已经被测试过了
56-60% 自建类要求更高一些80%
单元测试依赖
稳定且幂等,相互隔离
Mock
打桩函数 替换原有的函数,此处相当于不去读取原文件了
基准测试
fstrand快速随机数
*testing.B 基准测试
*testing.PB 并行基准测试
项目实践
需求分析 ER图 分层设计
分层结构
数据层 数据Model 处理数据增删改查
逻辑层 业务Entity 处理核心业务逻辑
视图层 试图view处理和外部交互的逻辑
GIN web框架
数据库 读文件 反序列化
Service
参数校验