当前位置: 首页 > 工具软件 > gobuild > 使用案例 >

go build 命令介绍

龚伯寅
2023-12-01

控制台输入: go help build 会输出所有的 go build 可带的所有参数,

go build 用于编译导入的包,包括import导入的包,以及这些包所依赖的其他关系包,但是并不会将编译后的结果进行安装。

go build 所在包为main 包时

  • 若go build 后跟好几个.go文件,编译时会认为这几个文件是在同一个包中,且已第一个.go 文件名为输出结果.(比如:go build ed.go rx.go 输出为ed 或 ed.exe)
  • 如果go build 后跟一个目录比如:go build /unix/sam 编译结果输出为: sam或sam.exe

go build 多个包或非main 包时,会丢弃编译结果,只检查是否可以执行编译

go build 编译包时,会忽略“_test.go”结尾的文件(即测试文件)

如果go build 后不跟任何参数则会编译当前目录所对应的代码包,生成目录名或目录名.exe 可执行文件

go build -o : 比如再main包目录(project)下,go build -o project2.exe ,则生成的结果不是project.exe 而是 project2.exe 就是说生成的可执行文件将会写入到你指定的文件名中

go build -i:默认不写 -i 情况下,编译后的.a 文件是不会保存也不会安装到 pkg 目录下的windows_amd64 目录中,但是只要加上 -i 编译后的.a 文件就会自动保存到pkg 目录中,就是说:标记 -i 会使 go build 命令安装那些编译目标依赖的且还未被安装的代码包。

下面简单说明:

标记含义
-a强行对项目所有的代码包(包含标准库中的代码包)进行重新构建,即使它们已经是最新的了。
-n打印编译期间所用到的命令,仅仅是打印并不真正执行它们。
-p n指定编译过程中执行各任务的并行数量(确切地说应该是并发数量)。在默认情况下,该数量等于CPU的逻辑核数。但是在darwin/arm平台(即iPhone和iPad所用的平台)下,该数量默认是1
-race启用数据竞争检测。只支持Linux/AMD 64、FreeBSD/AMD 64、达尔文/AMD 64和Windows/AMD 64。
-msan使用内存清除器启用互操作。只支持Linux/AMD 64、Linux/ARM 64,并且只有clang/llvm作为主机c+编译器。
-v打印出那些被编译时的代码包的名字。
-x打印编译期间所用到的其它命令(且执行)。注意它与-n标记的区别。
-work打印出编译时生成的临时工作目录的路径,并在编译结束时保留它。在默认情况下,编译结束时会删除该目录。
–p n指定编译过程中执行各任务的并行数量(确切地说应该是并发数量)。在默认情况下,该数量等于CPU的逻辑核数。但是在darwin/arm平台(即iPhone和iPad所用的平台)下,该数量默认是1。
-race开启竞态条件的检测。不过此标记目前仅在linux/amd64、freebsd/amd64、darwin/amd64和windows/amd64平台下受到支持。
以下标记下面标记是不常用的
-asmflags此标记可以后跟另外一些标记,如-D、-I、-S等。这些后跟的标记用于控制Go语言编译器编译汇编语言文件时的行为。
-buildmode此标记用于指定编译模式,使用方式如-buildmode=default(这等同于默认情况下的设置)。此标记支持的编译模式目前有6种。借此,我们可以控制编译器在编译完成后生成静态链接库(即.a文件,也就是我们之前说的归档文件)、动态链接库(即.so文件)或/和可执行文件(在Windows下是.exe文件)
-compiler此标记用于指定当前使用的编译器的名称。其值可以为gc或gccgo。其中,gc编译器即为Go语言自带的编辑器,而gccgo编译器则为GCC提供的Go语言编译器。
-gccgoflags此标记用于指定需要传递给gccgo编译器或链接器的标记的列表。
-gcflags此标记用于指定需要传递给go tool compile命令的标记的列表。
-installsuffix为了使当前的输出目录与默认的编译输出目录分离,可以使用这个标记。此标记的值会作为结果文件的父目录名称的后缀。其实,如果使用了-race标记,这个标记会被自动追加且其值会为race。如果我们同时使用了-race标记和-installsuffix,那么在-installsuffix标记的值的后面会再被追加_race,并以此来作为实际使用的后缀。
-ldflags此标记用于指定需要传递给go tool link命令的标记的列表。
-linkshared此标记用于与-buildmode=shared一同使用。后者会使作为编译目标的非main代码包都被合并到一个动态链接库文件中,而前者则会在此之上进行链接操作。
-pkgdir指定一个目录,并从改目录下加载编译好的.a 文件,并把编译可能产生新的 .a 文件放入到该目录中
-tags此标记用于指定在实际编译期间需要受理的编译标签(也可被称为编译约束)的列表
-toolexec此标记可以让我们去自定义在编译期间使用一些Go语言自带工具(如vet、asm等)的方式。

最后附上go 命令官方文档说明地址: https://golang.google.cn/cmd/go/

 类似资料: