这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
go module
Go语言从1.11版本之后官方推出的版本管理工具
Windows 下开启 GO111MODULE 的命令为:
set GO111MODULE=on 或者 set GO111MODULE=auto
MacOS 或者 Linux 下开启 GO111MODULE 的命令为:
export GO111MODULE=on 或者 export GO111MODULE=auto
go.mod当中 module 为 go.mod 文件所属的包,require 为项目所依赖的包及版本号,所依赖的包下 indirect 表示间接引用,incompatible代表不兼容
GOPROXY
代表代理服务器的意思,可以通过 go get 命令获取第三方依赖包,由于国内防火墙的存在,所以一般配置为
goproxy.cn
Windos配置如下
go env -w GOPROXY=https://goproxy.cn,direct
执行go get 命令,在下载依赖包的同时还可以指定依赖包的版本。
- 运行
go get -u命令会将项目中的包升级到最新的次要版本或者修订版本; - 运行
go get -u=patch命令会将项目中的包升级到最新的修订版本; - 运行
go get [包名]@[版本号]命令会下载对应包的指定版本或者将对应包升级到指定的版本。
go test(基础)
使用时需要导入"testing"
Go 语言推荐测试文件和源代码文件放在一块,测试文件以 _test.go 结尾。假设当前 package 有 controller.go 一个文件,我们想测试 controller.go 中的 Add 和 Delete 函数,那么应该新建 controller_test.go 作为测试文件
在测试文件当中的方法一般前缀会就加个Test,测试用的参数有且只有一个(一般为t *testing.T),除此之外还有基准测试(benchmark)的参数是 *testing.B,TestMain 的参数是 *testing.M 类型
运行go test会运行所有测试文件,也可以加入-v参数会显示每个用例的测试结果,-cover 参数可以查看覆盖率
也可以用-run来指定单个测试方法,并且参数支持通配符 *,和部分正则表达式,例如 ^、$。
补充
有关于进程、线程和协程的个人理解
协程: 用户态,轻量级,栈KB级别(Go中达到了2~4KB) 线程:内核态,线程跑多个协程,栈MB级别
个人认为,一个进程至少拥有一个或多个线程,而协程则是在线程的基础上再细分多个时间片进行运行