Golang应用实践 并发编程&单元测试| 青训营笔记

68 阅读1分钟

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

应用实践

并发编程

并发 vs 并行

并发:多线程程序在一个单核通过时间片运行

并行:多线程程序在多个核的cpu上运行

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

通过通信共享内存 通信共享内存.png

并发安全Lock.png

使用WaitGroup

WaitGroup.png

依赖管理

go get.png

go mod.png

测试

质量就是生命!

测试是避免事故的屏障

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

从上到下,覆盖率逐层变大,成本却逐层降低

单元测试

Rules:

  • 所有测试文件以 _test.go结尾
  • func TestXxx(t *testing.T)
  • 初始化逻辑放到TestMain中
 func TestMain(m *testing.M) {
     
     //测试前:数据装载、配置初始化等前置工作
     code := m.Run()
     
     //测试后:释放资源等收尾工作
     os.Exit(code)
 }

评估——代码覆盖率

assert.Equal(t,true,isPass)

Tips:

  • 一般覆盖率:50% ~60%
  • 测试分支相互独立、全面覆盖
  • 测试单元粒度足够小,函数单一职责

单元测试-Mock

基准测试

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

项目实践

ER图 Entity-Relationship Diagram

分层结构

分层结构.png