Go命令行操作

943 阅读3分钟

Go命令

Go语言自带有一套完整的命令操作工具,你可以通过再命令行中执行go来查看它们: image.png 这些命令对于我们平时编写的代码非常有用,接下来了解一些常用的命令。

go build

这个命令主要用于编译代码。在包的编译过程中,若有必要,会同时编译与之相关联的包。

  • 如果是普通包,当你执行 go build 之后,它不会产生任何文件。如果你需要在 $GOPATH/pkg 下生成相应的文件,那就得执行 go install。
  • 如果是 main 包,当你执行 go build 之后,它就会在当前目录下生成一个可执行文件。如果你需要在 $GOPATH/bin 下生成相应的文件,需要执行 go install,或者使用 go build -o 路径/a.exe。
  • 如果某个项目文件夹下有多个文件,而你只想编译某个文件,就可在 go build 之后加上文件名,例如 go build a.go;go build 命令默认会编译当前目录下的所有 go 文件。
  • 你也可以指定编译输出的文件名。例如,我们可以指定 go build -o astaxie.exe,默认情况是你的 package 名 (非 main 包),或者是第一个源文件的文件名 (main 包)。(注:实际上,package 名在 Go 语言规范 中指代码中 “package” 后使用的名称,此名称可以与文件夹名不同。默认生成的可执行文件名是文件夹名。)
  • go build 会忽略目录下以 _ 或 . 开头的 go 文件。
  • 如果你的源代码针对不同的操作系统需要不同的处理,那么你可以根据不同的操作系统后缀来命名文件。例如有一个读取数组的程序,它对于不同的操作系统可能有如下几个源文件:

     array_linux.go
array_darwin.go
array_windows.go
array_freebsd.go

   go build 的时候会选择性地编译以系统名结尾的文件(Linux、Darwin、Windows、Freebsd)。例如 Linux 系统下面编译只会选择 array_linux.go 文件,其它系统命名后缀文件全部忽略。

参数的介绍

  1. -o             指定输出的文件名,可以带上路径,例如 go build -o a``/b/c
  2. -i             安装相应的包,编译 + go ``install
  3. -a             更新全部已经是最新的包的,但是对标准包不适用
  4. -n       把需要执行的编译命令打印出来,但是不执行,这样就可以很容易的知道底层是如何运行的
  5. -p n            指定可以并行可运行的编译数目,默认是 CPU 数目
  6. -race            开启编译的时候自动检测数据竞争的情况,目前只支持 64 位的机器
  7. -``v              打印出来我们正在编译的包名
  8. -work              打印出来编译时候的临时文件夹名称,并且如果已经存在的话就不要删除
  9. -x              打印出来执行的命令,其实就是和 -n 的结果类似,只是这个会执行
  10. -ccflags ``'arg list'    传递参数给 5c, 6c, 8c 调用
  11. -compiler name        指定相应的编译器,gccgo 还是 gc
  12. -gccgoflags ``'arg list'   传递参数给 gccgo 编译连接调用
  13. -gcflags ``'arg list'     传递参数给 5g, 6g, 8g 调用
  14. -installsuffix suffix    为了和默认的安装包区别开来,采用这个前缀来重新安装那些依赖的包,-race 的时候默认已经是 -installsuffix race,大家可以通过 -n 命令来验证
  15. -ldflags ``'flag list'    传递参数给 5l, 6l, 8l 调用
  16. -tags ``'tag list'      设置在编译的时候可以适配的那些 tag,详细的 tag 限制参考里面的 Build Constraints