1、go build命令(编译命令)

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、go get命令(一键获取包、编译并安装)

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) 控制计时器

9、go pprof命令(性能分析命令)

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