1.1、go build 无参数编译
// 编译,生成可执行文件
go build ***.go// 运行可执行文件,windows上会加上exe,linux没有后缀
./可执行文件// go build+文件列表,会生成多个可执行文件
go build ***.go ***.go ……
1.2、go build 参数设置
参数 | 备注 |
---|---|
-o | 编译的包名 |
-v | 编译时显示包名 |
-p n | 开启并发编译,默认情况下该值为 CPU 逻辑核数 |
-a | 强制重新构建 |
-n | 打印编译时会用到的所有命令,但不真正执行 |
-x | 打印编译时会用到的所有命令 |
-race | 开启竞态检测 |
1.3、示例
2、go clean命令(清除编译文件)2.1、参数
go clean 命令是用来移除当前源码包和关联源码包里面编译生成的文件。这些文件包括:
- _obj/ 旧的 object 目录,由 Makefiles 遗留
- _test/ 旧的 test 目录,由 Makefiles 遗留
- _testmain.go 旧的 gotest 文件,由M akefiles 遗留
- test.out 旧的 test 记录,由 Makefiles 遗留
- build.out 旧的 test 记录,由 Makefiles 遗留
- *.[568ao] object 文件,由 Makefiles 遗留
- DIR(.exe) 由 go build 产生
- DIR.test(.exe) 由 go test -c 产生
- MAINFILE(.exe) 由 go build MAINFILE.go 产生
- *.so 由 SWIG 产生
参数介绍
- -i 清除关联的安装的包和可运行文件,也就是通过 go install 安装的文件
- -n 把需要执行的清除命令打印出来,但是不执行,这样就可以很容易的知道底层是如何运行的
- -r 循环的清除在 import 中引入的包
- -x 打印出来执行的详细命令,其实就是 -n 打印的执行版本
一般都是利用这个命令清除编译文件,然后 github 递交源码,在本机测试的时候这些编译文件都是和系统相关的,但是对于源码管理来说没必要。
go clean -i -ncd /Users/astaxie/develop/gopath/src/mathapp
rm -f mathapp mathapp.exe mathapp.test mathapp.test.exe app app.exe
rm -f /Users/astaxie/develop/gopath/bin/mathapp
2.2、示例
3、go run命令(编译并运行)3.1、参数
go run 命令会编译源码,并且直接执行源码的 main() 函数,不会在当前目录留下可执行文件。
go run 不能使用“go run+包”的方式进行编译,如需快速编译运行包,需要使用如下步骤来代替:
- 使用 go build 生成可执行文件。
- 运行可执行文件。
3.2、示例
4、go fmt命令(格式化代码文件)4.1、参数
为了减少浪费在排版上的时间,go 工具集中提供了一个 go fmt 命令它可以帮你格式化你写好的代码文件,使你写代码的时候不需要关心格式,只需要在写完之后执行go fmt <文件名>.go ,代码就会被修改成了标准格式。
gofmt -w -l src
参数介绍
- -l 显示那些需要格式化的文件
- -w 把改写后的内容直接写入到文件中,而不是作为结果打印到标准输出。
- -r 添加形如“a[b:len(a)] -> a[b:]”的重写规则,方便我们做批量替换
- -s 简化文件中的代码
- -d 显示格式化前后的 diff 而不是写入文件,默认是 false
- -e 打印所有的语法错误到标准输出。如果不使用此标记,则只会打印不同行的前 10 个错误。
- -cpuprofile 支持调试模式,写入相应的 cpufile 到指定的文件
4.2、示例
5、go install命令(编译并安装)5.1、参数
go install 只是将编译的中间文件放在 GOPATH 的 pkg 目录下,以及固定地将编译结果放在 GOPATH 的 bin 目录下。这个命令在内部实际上分成了两步操作:
- 第1步是生成结果文件(可执行文件或者 .a 包),
- 第2步会把编译好的结果移到 $GOPATH/pkg 或者 $GOPATH/bin。
go install 的编译过程有如下规律:
- go install 是建立在 GOPATH 上的,无法在独立的目录里使用 go install。
- GOPATH 下的 bin 目录放置的是使用 go install 生成的可执行文件,可执行文件的名称来自于编译时的包名。
- go install 输出目录始终为 GOPATH 下的 bin 目录,无法使用-o附加参数进行自定义。
- GOPATH 下的 pkg 目录放置的是编译期间的中间文件。
5.2、示例
go install 会在GOPATH的bin目录下生成对应的可执行文件
6.1、参数
golang.org在国内由于一些众所周知的原因无法直接访问,因为golang.org被墙的原因,可以使用github.com/golang/tools 和 golang.org/x/tools 是一样的,下载后复制到golang.org中。
都可以用:
go get -u + 远程包
参数介绍:
- -d 只下载不安装
- -f 只有在你包含了 -u 参数的时候才有效,不让 -u 去验证 import 中的每一个都已经获取了,这对于本地 fork 的包特别有用
- -fix 在获取源码之后先运行fix,然后再去做其他的事情
- -t 同时也下载需要为运行测试所需要的包
- -u 强制使用网络去更新包和它的依赖包
- -v 显示执行的命令
6.2、示例
7、go generate命令(在编译前自动化生成某类代码)7.1、参数
go generate 命令是从 Go1.4 开始设计的,用于在编译前自动化生成某类代码。
go generate 和 go build 是完全不一样的命令,通过分析源码中特殊的注释,然后执行相应的命令。
//go:generate command arg1 arg2
这样在同一个目录下执行命令go generate就会自动运行命令command arg1 arg2。command可以是在PATH中的任何命令,应用非常广泛。
有几点需要注意:
- 该特殊注释必须在 .go 源码文件中。
- 每个源码文件可以包含多个 generate 特殊注释时。
- 显示运行 go generate 命令时,才会执行特殊注释后面的命令。
- 命令串行执行的,如果出错,就终止后面的执行。
- 特殊注释必须以"//go:generate"开头,双斜线后面没有空格。
7.2、示例
8、go test命令(测试命令)go test 命令,会自动读取源码目录下面名为 *_test.go 的文件,生成并运行测试用的可执行文件。
主要提供“单元测试”和“基准测试”两种方案
-
单元测试——测试和验证代码的框架
– 1) 单元测试命令行
– 2) 运行指定单元测试用例
– 3) 标记单元测试结果
– 4) 单元测试日志 -
基准测试——获得代码内存占用和运行效率的性能数据
– 1) 基础测试基本使用
– 2) 基准测试原理
– 3) 自定义测试时间
– 4) 测试内存
– 5) 控制计时器
go pprof 可以帮助开发者快速分析及定位各种性能问题,如 CPU 消耗、内存分配及阻塞分析。
性能分析首先需要使用 runtime.pprof 包嵌入到待分析程序的入口和结束处。runtime.pprof 包在运行时对程序进行每秒 100 次的采样,最少采样 1 秒。然后将生成的数据输出,让开发者写入文件或者其他媒介上进行分析。
go pprof 工具链配合 Graphviz 图形化工具可以将 runtime.pprof 包生成的数据转换为 PDF 格式,以图片的方式展示程序的性能分析结果。
- 安装第三方图形化显式分析数据工具(Graphviz)
yum install graphiviz
- 安装第三方性能分析来分析代码包
go get github.com/pkg/profile