这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记
1、同步互斥
协程:用户态、轻量级
线程:内核态,栈KB级别
创建协程:在函数名前加go关键字,函数就会并行执行
go提倡通过通信实现共享内存(channel)而不是通过共享内存实现通信
channel使用make创建 无缓冲通道(同步通道)make(chan int) 有缓存通道make(chan int,[缓冲大小])(生产消费模型)带缓冲的channel可以解决生产消费之间的延迟问题
并发安全Lock: 不加锁不安全:有时正确又有时不正确(undefined问题)
开发过程中很难定位一些共享内存导致的问题,所以开发过程中一定要保证共享内存读写安全(加锁🔒!)
同步的WaitGroup,Add,Done等
小结:
- goroutine协程
- channel管道
- sync同步互斥操作
2、依赖管理
工程项目不可能基于标准库从0到1搭建项目,所以需要管理依赖包 GOPATH->GO Vendor -> GO Moudle GOPATH是把所有依赖包都放在src目录下,有问题无法实现某一package的多版本控制
GO Vendor也会出现依赖冲突问题
GO Module通过go.mod管理依赖包版本
gomod中间接依赖会用“//inderict”标识出来
1.4可以兼容1.3,也就是说如果有1.5、1.6也会选择1.4
GOPROXY=“proxy1.cn,https://proxy2.cn,… 表示先从前两个找,找不到再回到源站点去找,用逗号分开
go mod [init] [download] tidy
小结
- Go依赖管理路线
- Go Module依赖管理方案
3、测试
单元测试 | Mock测试 | 基准测试
提升效率体现在能够快速定位bug(单元测试过的不会有问题)
单元测试代码覆盖率的概念:覆盖率越高越好(不断测试各个分支),一般覆盖率50%~60%,这样主流程没问题了 对于资金类的,覆盖率一般要求80%以上,测试分支完备
mock(没太懂):不依赖本地文件
基准测试:一Benchmark开头
- 优化代码,需要对当前代码分析
- 内置的测试框架提供了基准测试的能力
4、项目实践
分层模型:
数据层对逻辑层透明,只暴露一些统一的接口,即逻辑层不关系数据层具体实现(类似TCP/IP模型)
项目效果
后面再补