第二节课 | 青训营笔记

69 阅读2分钟

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

1、同步互斥

协程:用户态、轻量级

线程:内核态,栈KB级别

创建协程:在函数名前加go关键字,函数就会并行执行

go提倡通过通信实现共享内存(channel)而不是通过共享内存实现通信

channel使用make创建 无缓冲通道(同步通道)make(chan int) 有缓存通道make(chan int,[缓冲大小])(生产消费模型)带缓冲的channel可以解决生产消费之间的延迟问题

并发安全Lock: 不加锁不安全:有时正确又有时不正确(undefined问题)

捕获.JPG 开发过程中很难定位一些共享内存导致的问题,所以开发过程中一定要保证共享内存读写安全(加锁🔒!) 同步的WaitGroup,Add,Done等

捕获.JPG

小结:

  • goroutine协程
  • channel管道
  • sync同步互斥操作

2、依赖管理

工程项目不可能基于标准库从0到1搭建项目,所以需要管理依赖包 GOPATH->GO Vendor -> GO Moudle GOPATH是把所有依赖包都放在src目录下,有问题无法实现某一package的多版本控制

GO Vendor也会出现依赖冲突问题

GO Module通过go.mod管理依赖包版本

gomod中间接依赖会用“//inderict”标识出来

origin_img_v2_d14c461e-5d22-475b-84fa-b5700a69104g.jpg 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测试 | 基准测试

捕获.JPG 提升效率体现在能够快速定位bug(单元测试过的不会有问题)

单元测试代码覆盖率的概念:覆盖率越高越好(不断测试各个分支),一般覆盖率50%~60%,这样主流程没问题了 对于资金类的,覆盖率一般要求80%以上,测试分支完备

mock(没太懂):不依赖本地文件

基准测试:一Benchmark开头

  • 优化代码,需要对当前代码分析
  • 内置的测试框架提供了基准测试的能力

4、项目实践

分层模型:

捕获.JPG 数据层对逻辑层透明,只暴露一些统一的接口,即逻辑层不关系数据层具体实现(类似TCP/IP模型)

项目效果

捕获.JPG 后面再补