go语言实践 | 青训营笔记

87 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第二篇笔记,在学习了go语言的基本语法和了解了go语言的基础特性后,跟随讲师的讲解,开始使用go语言进行简单的工程项目实践,增加对go语言的熟悉度。

  1. go语言知识点:
  • Go可以充分发挥多核优势,高效运行
  • 协程与线程: 协程:用户态,轻量级线程,栈KB级别 线程:内核态,线程跑多个(上万个)协程,栈MB级别。
    • 怎么开启协程:
go func(j int) {
     hello(j)
 }
  • Channel:用来协程间进行通信的 make(chan元素类型,[缓冲大小])· 无缓冲通道 make(chan int) 有缓冲通道 make(chan int,2) 生产者消费者模型,channel在左边就是写入,在右边就是读取

  • 并发安全Lock

  • WaitGroup

    Add(m int) 计数器加m

    Done() 计数器减一

    Wait()

  1. 工程依赖管理
  • Go path ---> Go Vendor --->Go Module

  • 依赖管理三要素:类似Maven

    配置文件,描述依赖 go.mod

    中心仓库管理依赖库 Proxy

    本地工具 go get / go mod

  • 版本1.1.1第一个是大版本,可能不兼容,第二个保证兼容,第三个一般是修改bug。1.3和1.4,保证最低兼容要求是选1.4

  • a-->b -->c :a对b是直接依赖,a对c是间接依赖

  • 依赖分发:Proxy:保证稳定可靠

 GOPROXY="httpa://proxy1 -->proxy2 -->.cn, https://proxy2.cn ,direct”
 服务站点URL列表,“direct”表示源站
 proxy1 -->proxy2 -->direct
  • 工具: go get go mod : init (初始化)/ download (下载模块到本地)/ tidy(增加需要的依赖,删除不需要的依赖,每次提交前可以执行一次)
  1. 单元测试
  • 测试单元:模块、函数、....

  • 规则:

    • 所有测试文件以_test.go结尾
    • func TestXxx(*testing.T)
    • 初始化逻辑放到TestMain中
  • 覆盖率:--cover

    有多少代码被验证了

    • 一般覆盖率:50%~60%,较高覆盖率80%+。
    • 测试分支保证相互独立、全面覆盖
    • 测试单元保证粒度足够小,函数单一职责
  • 依赖:**>稳定&幂等

    不能依赖于不稳定的网络、本地文件等,

    需要Mock机制保证稳定&幂等性,打桩?不依赖于本地文件?

  • 基准测试

    rand要竞争锁,高并发情况下有性能问题