Go 编译和工具链
Go语言编译和工具链
-
范围
- 获取源码、编译、文档、测试、性能分析,源码格式化、源码提示、重构工具等
-
go build
编译- 目的 输出可执行文件
- 方法
- 无参数编译
- 使用条件 源码中没有依赖
GOPATH
的包引用
- 使用条件 源码中没有依赖
- 文件列表编译
go build
+文件列表- 编译同目录的多个源码文件时,可以在
go build
的后面提供多个文件名 - 此时可执行文件默认选择文件列表中第一个源码文件作为可执行文件名输出
-o
指定输出可执行文件名-race
竞态条件检测
- 指定包编译
go build+包
在设置GOPATH
后,可以直接根据包名进行编译
-
go run
go run
命令会编译源码,并且直接执行源码的 main() 函数,不会在当前目录留下可执行文件
-
go install
- 参数绝大多数都可以与
go build
通用 - 将编译的中间文件放在 GOPATH 的 pkg 目录下,固定地将编译结果放在 GOPATH 的 bin 目录下
GOPATH
下的pkg
目录放置的是编译期间的中间文件
- 参数绝大多数都可以与
-
go get
- 借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装
-v
显示操作流程的日志及信息,方便检查错误-u
下载丢失的包,但不会更新已经存在的包-d
只下载不安装
-
go test
测试系统- 单元测试规约
- 测试文件以
_test
结尾 - 用例函数以
Test
为前缀 - 测试用例文件用go test指令来执行,不需要main()作为函数入口
- 运行指定单元测试
-run
跟随的测试用例的名称支持正则表达式- 默认执行文件内的所有测试用例。可以使用-run参数选择需要的测试用例单独执行
- 标记单元测试结果
- 终止当前测试用例时,使用
FailNow
方法
- 终止当前测试用例时,使用
- 单元测试
- 每个测试用例可能并发执行,使用 testing.T 提供的日志输出可以保证日志跟随这个测试上下文一起打印输出
- 基准测试(benchmark)
- 获得代码内存占用和运行效率的性能数据
- 测试代码需要保证函数可重入性及无状态
- 原理
- 基准测试框架对一个测试用例的默认测试时间是 1 秒
- 当以 Benchmark 开头的基准测试用例函数返回时还不到 1 秒, testing.B 中的 N 值递增
- 参数
-benchtime
参数可以自定义测试时间-bench=.
测试文件中的所有基准测试用例
- 测试内存
- 基准测试可以对一段代码可能存在的内存分配进行统计
go test -v -bench=Alloc -benchmem benchmark_test.go
- 控制计时器
- 让计时器只在需要的区间进行测试
- 计数器内部不仅包含耗时数据,还包括内存分配的数据
-
go pprof
- 快速分析及定位各种性能问题,如 CPU 消耗、内存分配及阻塞分析
-
Graphviz
- Graphviz 是一套通过文本描述的方法生成图形的工具包。描述文本的语言叫做 DOT。
本作品采用《CC 协议》,转载必须注明作者和本文链接