GO语言进阶 | 青训营笔记

25 阅读2分钟

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

多线程

线程与协程, 协程是更轻量级的线程,运行方式

go somefunc()
go func(param int){} (1)

方式2为匿名启用

通道

通道使用make(chan type) 或者make(chan type,2)创建,后者是有缓存的,可以存2个.

通道存数据chan<-value通道取数据则可以使用range

for i: range chan

go语言推荐使用Channel来在协程之间共享内存

在执行某些任务的时候可以通过var lock sync.Mutex新建一个锁, 在对变量操作之前加锁,操作之后解锁

lock()unlock()之间的代码叫做临界区,一个时间只可以有一个goroutine执行,是线程安全的

依赖管理

从gopath 到go vendor 到go module渐渐演变.最常用的是go module

GoPath

/bin 内是编译的二进制文件,/pkg是中间产物,/src是项目源代码 之建议将src纳入版本管理

gopath有一个缺点,无法实现多版本控制

vendor

vendor就是把包存到vendor目录下,解决了上面的问题 问题是包A依赖C版本1,包B依赖C版本2,这样就会出现问题

gopath

可以使用go get/mod管理

//indirect 间接依赖 incompatible标记不兼容

编译的时候

编译的时候会选择满足编译条件的最低版本

GOProxy

GoProxy会缓存源站点的各包.

GOPROXY="proxy1.cn" "proxy2.cn" direct 意思是先访问1,在访问网站2,如果还是没有,访问原站点

GOGet

go get 地址 @tag

tag有以下几种

  • @update默认
  • @none 无依赖
  • @v1.12.2 指定版本
  • @23dddd4 commit
  • @master 最新commit

Go Mod

go mod init 初始化

  • download 下载模块
  • tidy 删除不需要的依赖

Go测试

测试分为回归测试,集成测试,单元测试等.

回归测试,就是直接测试功能,比如说刷一下抖音
集成测试,是功能的测试.
单元测试,就是对代码进行测试

单元测试

输入指定的数值,再输出,看看值是否与期望的值相符合

测试规则

测试文件以_test.go结尾
测试函数为 func TestXxx(*test T)
逻辑初始化存于TestMain中

测试分支相互独立,全面覆盖,单元粒度足够小,职责单一