这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
1 语言进阶
1.0 并发vs并行
1.1 Goroutine
1.2 CSP
- go提倡通过通信共享内存(Channel)而不是通过共享内存实现通信(Lock)(但两种机制都有)
1.3 Channel
- 分为有缓冲通道(典型的生产消费模型,可以解决生产和消费速度不均衡带来的效率问题)和无缓冲通道
1.4 并发安全Lock
1.5 WaitGroup
- 计数器:
Add()``Done()``Wait()
2 依赖管理
- SDK是什么:SDK(Software Development Kit)
- SDK和API的关系:SDK包含了API、开发辅助工具、文档等等
2.1 Go依赖管理
- GOPATH -> Go Vendor -> Go Module
- 演化本质:更好地兼容不同的版本
2.2 依赖管理三要素
- 配置文件,描述依赖:
go.mod - 中心仓库管理依赖库:
Proxy - 本地工具:
go get/mod
2.3 依赖配置/分发
- 工具:
go getgo mod
3 测试
- 回归测试/集成测试/单元测试
3.1 单元测试
3.2 Mock测试
- 有外部依赖的情况使用,保证稳定性
3.3 基准测试
- 分析系统性能
4 项目实战
-
需求用例
-
ER图
-
分层结构
-
单例模式(Singleton)
- 减少存储的浪费
sync.Once:高并发下只执行一次的场景- 对外保证的语义:确保once变量传入函数只被执行一次
- 实现只创建一个对象:
// 全局变量(我们只希望创建一个)
var s *SomeObject
// 定义一个 once 变量
var once sync.Once
// 只希望创建一个,单例模式
func GetInstance() *SomeObject {
once.Do(func(){
// 创建一个对象,赋值指针给全局变量
s = &SomeObject{}
})
return s
}
TODO
实战还没写,明天写完单独再发一篇ovo