第二次课堂记录 | 青训营笔记

85 阅读2分钟

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

01语言进阶

并发VS并行

  • 多线程程序在一个核的cpu运行
  • 多线程程序在多个核的cpu运行 Go可以充分发挥多核优势,高效运行--为并发而生。

1.1 Goroutine

  • 协程:用户态,轻量级,栈KB级别
  • 线程:内核态,线程跑多个协程,栈MB级别

image.png

1.2 CSP

image.png 提倡通过通信共享内存而不是通过共享内存而实现通信!

1.3 Channel

make(chan元素类型,[缓冲大小])

  • 无缓冲通道 make(chan int)
  • 有缓冲通道 make(chan int, 2)

1.4 并发安全lock

image.png 右边都开启五个协程进行并发执行进行测试

1.5 WaitGroup

计数器:Add开启协程+1,Done执行结束-1,Wait主协程阻塞直到计数器为零

02依赖管理

2.1 Go依赖管理演进

  1. GOPATH
  2. Go Vendor
  3. Go Moudle
  • 不同的项目的环境依赖不同
  • 控制依赖库的版本

GOPATH

image.png

  • 项目代码直接依赖src下的代码
  • Go get 下载最新版本的包到src目录下 弊端:无法实现package的多版本控制

Go Vendor

image.png

  • 项目目录添加vendor文件,所有依赖包副本形式放在$ProjectRoot/vendor
  • 依赖寻址方式 vendor->GOPATH
  • 通过每个项目引入一份依赖副本,解决了package的冲突问题 弊端:无法控制依赖版本、更新项目可能导致依赖冲突编译错误

Go Moudle

  • 通过go.mod文件管理依赖包版本
  • 通过go get/ go mod 指令工具管理依赖包 终极目标:定义版本规则和管理项目依赖关系

2.2 依赖管理三要素

配置文件 描述以来 go.mod

image.png

中心仓库管理依赖库 Proxy

image.png 本地工具 go get/mod

image.png

03测试

回归测试、集成测试、单元测试

3.1 单元测试

image.png 单元测试决定代码质量

单元测试规则:

  • 所有测试与_test.go结尾
  • func TestXxx(*Testing.T)
  • 初始化逻辑放到TestMain中

3.2 依赖

image.png

快速 Mock

  • 为一个函数打桩
  • 为一个方法打桩

基准测试

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