go语言进阶|青训营笔记

65 阅读2分钟

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

一、本堂课重点内容

  1. go语言并发编程
  2. go包管理
  3. 如何用go写单元测试

二、详细知识点介绍:

  • go 并发是啥
  1. go实现了用户态的线程,栈kb级别,切换消耗资源较线程开销小。
  2. go提倡通过通信共享内存,因此涉及通道。go 用channel实现通道,无缓冲通道实现同步,有缓冲通道实现生产者消费模型。
ch := make(chan int) //无缓冲通道
ch := make(chan int,2) //有缓冲通道
  1. go 并发安全Lock锁
var lock sync.Mutex
lock.Lock() //加锁
lock.Unlock() //解锁
  1. go WaitGrpup,比较优雅的协程同步方法,Add,Done,Wait三件套。
  • go 如何进行包管理的
  1. goPath,项目代码直接依赖src下的代码,使用go get直接下载最新版本的包到src目录中,弊端是无法实现包的多版本控制。
  2. go vendor,通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的冲突问题。弊端是同一个项目的交叉引用同一个包的不同版本。
  3. go mod,通过go.mod文件管理依赖包版本,通过go get/go mod指令工具管理依赖包。
  4. go Proxy,缓存节点,保证依赖的稳定性,依赖分发。
go get example.org/pkg
@update //默认
@none //删除依赖
@v1.1.2 //tag版本,语义版本
@23dfdd5 //特定的commit
@master //分支的最新commit

go mod
init //初始化,创建go.mod文件
download //下载模块到本地缓存
tidy //增加需要的依赖,删除不需要的依赖

文件-proxy-工具

  • go 单元测试揭秘
  1. 所有测试文件以_test.go结尾
  2. func Testxxx
  3. 初始化逻辑放到TestMain中,主要完成测试前,数据装载,配置初始化等前置工作,测试后释放资源等收尾工作,m.Run().
  4. 单元测试需要实现稳定&幂等,使用Mock机制

三、实践练习例子:

  • 有什么实践举例帮助理解知识点?

四、课后个人总结:

  • go channel那ppt的图协程和线程的栈大小写反了