这是我参与「第三届青训营 -后端场」笔记创作活动的的第二篇笔记。
1.语言进阶
协程与线程的关系
CSP
通信:channel(建议)
使用共享内容实现通信:需要用互斥信号量来实现
Channel
1.使用make(chan 元素类型,[缓冲大小])来创建通道
2.有缓冲通道
当缓冲区空间满了之后,会阻塞缓冲,直到把缓冲区内容取走才能再次存放数据,【典型生产消费模型】
并发安全Lock(Sync包下关键字)
因为在并发过程中,可能会对某个变量同时访问,如果不加锁,可能会出现错误
WaitGroup (Sync包下关键字)
done():每个任务完成时,将计时器减一
计数器为0时,表面所有并发任务已经完成。
2.依赖管理
2.1 Go的依赖管理的三个阶段
2.1.1 gopath
gopath 弊端
无法实现package的多版本控制
2.1.2 go vender
引用依赖副本
go vender弊端
1.无法控制依赖版本
2.更新项目又可能出现依赖冲突,导致编译出错
2.1.3 go module
2.2依赖管理三要素:
依赖简单理解:依赖是工具包,工具类,在开发过程中,我们需要使用工具包中的方法进行开发。
工具类里面有别人写好的代码,我们可以使用工具类来调用其中的方法
2.2.1依赖配置-version
主要分成两种类型:语义化版本和基于commit伪版本
语义化版本
major:属于一个大版本,不同版本之间代码隔离
minor:代码兼容
patch:做一些代码bug修复
基于commit伪版本
依赖配置-indirect 【非直接依赖】
依赖配置-incompatible
依赖分发-回源
要解决上述的问题,可以使用Proxy解决
3 测试
回归测试、集成测试、单元测试(从左到右,覆盖层逐层变大,成本却逐层降低) 单元测试在一定程度上决定了代码质量。
3.1 单元测试
规则:
1.所有测试文件都以_test.go结尾
2.func TestXxx(*testing.T)
3.初始化逻辑放到TestMain中