Go语言上手-工程实践 | 青训营笔记

61 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第二篇笔记。


1.语言进阶

协程与线程的关系

1651985633(1).png

CSP

1651985709(1).png 通信:channel(建议)
使用共享内容实现通信:需要用互斥信号量来实现

Channel

1.使用make(chan 元素类型,[缓冲大小])来创建通道 1651986170(1).png 2.有缓冲通道 1651986209(1).png 当缓冲区空间满了之后,会阻塞缓冲,直到把缓冲区内容取走才能再次存放数据,【典型生产消费模型】

并发安全Lock(Sync包下关键字)

 因为在并发过程中,可能会对某个变量同时访问,如果不加锁,可能会出现错误

1651986524(1).png

WaitGroup (Sync包下关键字)

1651986717(1).png done():每个任务完成时,将计时器减一

计数器为0时,表面所有并发任务已经完成。

1651987085(1).png

2.依赖管理

2.1 Go的依赖管理的三个阶段

1651987397(1).png

2.1.1 gopath

1651987521(1).png

gopath 弊端

无法实现package的多版本控制

2.1.2 go vender

1652101286(1).png 引用依赖副本

go vender弊端

1.无法控制依赖版本
2.更新项目又可能出现依赖冲突,导致编译出错

2.1.3 go module

1652101657(1).png

2.2依赖管理三要素:

依赖简单理解:依赖是工具包,工具类,在开发过程中,我们需要使用工具包中的方法进行开发。
工具类里面有别人写好的代码,我们可以使用工具类来调用其中的方法 1652101674(1).png

2.2.1依赖配置-version

主要分成两种类型:语义化版本和基于commit伪版本

语义化版本

1652102059(1).png major:属于一个大版本,不同版本之间代码隔离
minor:代码兼容
patch:做一些代码bug修复

基于commit伪版本

1652102398(1).png

依赖配置-indirect 【非直接依赖】
依赖配置-incompatible

1652102745(1).png

依赖分发-回源

1652104153(1).png 要解决上述的问题,可以使用Proxy解决

3 测试

回归测试、集成测试、单元测试(从左到右,覆盖层逐层变大,成本却逐层降低) 单元测试在一定程度上决定了代码质量。

3.1 单元测试

1652105935(1).png 规则:
1.所有测试文件都以_test.go结尾
2.func TestXxx(*testing.T)
1652107575(1).png 3.初始化逻辑放到TestMain中 1652107593(1).png