Go语言进阶与工程应用 | 青训营笔记

84 阅读2分钟
这是我参与「第五届青训营 」笔记创作活动的第2天

本节课重点

Go语言进阶

  1. Goroutine 协程
  2. CSP(Communicating Sequential Procecssess)
    • 提倡通过通信共享内存而不是通过共享内存而实现通信
  3. Channel make(chan int, size int(可选缓冲区大小))
  4. 并发安全
lock sync.Mutex
lock.lock()
lock.Unlock()
  1. 线程同步 sync中的WaitGroup进行类似信号量的加减。
var wg sync.WaitGroup
wg.Add(5)
defer wg.Done()
wg.Wait()

依赖管理

Go Modele包管理工具三要素

  1. 配置文件,描述依赖 go.mod
    1. 依赖管理基本单元
    2. 原生库
    3. 单元依赖
      1. indirect 非直接依赖
      2. 主版本v2以上会添加+incompatible后缀
  2. 中心仓库管理依赖库 Proxy
    • 实现稳定可靠的依赖
    • 多层寻找
  3. 本地工具 go get/mod
    1. go get example.org/pkg
      1. @update 默认
      2. @none 删除依赖
      3. @v1.1.2 tag版本,语义版本
      4. 23dfdd5 特定的commit
      5. master 分支的最新commit
    2. go mod
      1. init 初始化,创建go.mod文件
      2. download 下载模块到本地缓存
      3. tidy 增加需要的依赖,删除不需要的依赖

测试

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

  1. 回归测试
    • 人员试用测试
  2. 集成测试
    • 暴露的接口进行测试
  3. 单元测试
    • 对模块测试验证
    • 输入->测试单元->输出->与期望校对
    • 保证质量 提升效率
    1. 规则
      1. 所有测试文件以_test.go结尾
      2. func TestXxx(*testing.T)
      3. 初始化逻辑放到TestMain中
    2. 指令 go test [flags] [packages]
    3. 代码覆盖率--->越高越好
      • 一般覆盖率:50%~60%
  4. 基准测试 go test -bench=

本节课难点

mock测试

  1. mock测试是什么?
    • mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
  2. 实例

实例

  1. 需求设计

    1. 需求用例
    2. ER图
    3. 分层结构
  2. 代码开发

    1. 数据层
      • 外部数据的增删改查
      1. file
      2. model
      3. respository
    2. 逻辑层
      • 处理核心业务逻辑输出
      1. entity
      2. Service
    3. 视图层
      • 处理和外部交互逻辑
      1. controllor
      2. view
      3. client
  3. 测试运行

我遇到的问题及其解决方法

  1. 在使用时单元测试时覆盖率并不高,怎么提升?
    • 使用多个例子进行测试增加覆盖率。

引用参考

  1. mock测试_百度百科 (baidu.com)
  2. 使用Golang的官方mock工具--gomock - 简书 (jianshu.com)