Go语言进阶 | 青训营笔记

100 阅读2分钟

Go语言进阶

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天。

  1. 线程与协程Goroutine

    1. 在子函数前加一个go关键字,go func(){}()
    2. defer close()延迟的资源关闭
  2. CSP,携程之间的通信,通过通信共享内存而不是通过共享内存实现通信

  3. Channel通道,无缓冲/有缓冲通道,make(chan元素类型,[缓冲大小])

  4. 并发安全lock

  5. WaitGroup

Go依赖(写好的开发包)管理

  1. GOPATH、GoVendor、GoModule

    1.GOPATH(bin、pkg、src)项目代码直接依赖src下的代码。go get下载最新版本的包到src目录下。弊端:无法实现package的多版本控制。 2.GoVendor,项目目录下增加vendor文件夹,存放依赖包副本。弊端:无法控制依赖的版本,依赖冲突、编译出错。 3.GoModule,go.mod文件管理依赖包版本、go get/go mod指令工具管理依赖包。

  2. 依赖管理三要素

    1. 配置文件,描述依赖 go.mod
    2. 中心仓库管理依赖库 Proxy
    3. 本地工具 go get/mod
  3. 依赖配置-version、indirect、incompatible

    1. 语义化版本
    2. 基于commit伪版本
  4. 依赖图

  5. 依赖分发

    1. 回源
    2. Proxy
    3. 变量GOPROXY
  6. 工具

    1. go get
    2. go mod(init、download、tidy)

Go测试

  1. 回归测试
  2. 集成测试
  3. 单元测试,单元测试主要包括,输入,测过单元输出,以及校对,单元的概念比较广,包括接口,函数,模块等:用最后的校对来保证代码的功能与我们的预期相,单侧一方面可以保证质量,在整体覆盖率足够的情况下,一定程度上既保证了新功能本身的正确性,又未破坏原有代码的正确性,另一方面可以提升效率,在代有bg的情况下,通过编写单测,可以在一个较短周期内定位和修复问题。
    1. 规则
      1. 测试文件以_test.go结尾
      2. 测试函数命名func TestXxx(*testing.T)
      3. 初始化逻辑放到TestMain中
    2. 覆盖率 go test *.go --cover,一般要50%-60%,较高80%+
    3. 依赖:外部依赖=>稳定&幂等
    4. 文件处理
  4. Mock测试打桩,monkey
  5. 基准测试