go build

go build

作用:将Go语言程序和相关依赖编译成可执行文件

go build 无参数编译

生成当前目录名的可执行文件并放置于当前目录下,如:

go build

go build+文件列表

编译同目录的多个源码文件时,可以在 go build 的后面提供多个文件名,go build 会编译这些源码,输出可执行文件,"go build+文件列表"的格式如下:

go build file1.go file2.go...

可执行文件默认选择文件列表中第一个源码文件作为可执行文件名输出,如:

go build upload.go main.go

使用"go build+文件列表"编译方式编译时,文件列表中的每个文件必须是同一个包的 Go 源码。

注意:如果go build main.go,但是main.go调用了同包的其他文件,会报错。

复制代码
$ tree -L 2
└── main
    ├── main.go
    └── hello.go

main.go内容如下:

复制代码
package main

func main() {
	println("this is function main")
	hello()
	println(A)
}

hello.go内容如下:

复制代码
package main

var A string = "AA"

func hello() {
	println("this is function hello")
}

因为同一个包下,并没有import语句,不会自动导入。解决:go build main.go hello.go

复制代码
$ go build main.go
# command-line-arguments
.\main.go:5:2: undefined: hello
.\main.go:6:10: undefined: A

go build+包

可以直接根据包名进行编译,即便包内文件被增(加)删(除)也不影响编译指令。

下面的命令用于构建同一个包,虽然它们的写法各不相同:

复制代码
$ cd $GOPATH/src/gopl.io/ch1/helloworld
$ go build

或者

复制代码
$ cd anywhere
$ go build gopl.io/ch1/helloworld

或者

复制代码
$ cd $GOPATH
$ go build ./src/gopl.io/ch1/helloworld

但不能这样

复制代码
$ cd $GOPATH
$ go build src/gopl.io/ch1/helloworld
Error: cannot find package "src/gopl.io/ch1/helloworld".

go build 还有一些附加参数,可以显示更多的编译信息和更多的操作,详见下表所示。

附加参数 备 注
-v 编译时显示包名
-p n 开启并发编译,默认情况下该值为 CPU 逻辑核数
-a 强制重新构建
-n 打印编译时会用到的所有命令,但不真正执行
-x 打印编译时会用到的所有命令
-race 开启竞态检测,常用于并发模式下的共享变量检测
-o 后接文件名,强制对输出的文件进行重命名
-work 打印编译工作的临时目录
-gcflags 后面的参数可以是多个,用空格进行分隔,并用 ""进行包裹,这些参数将传递到 go tool compile 工具中进行调用。例如,go build -gcflags "-l -m"
-ldflags 后面的参数可以是多个,用空格进行分隔,并用 ""进行包裹,这些参数将传递到 go tool link 工具中进行调用。例如,go build -ldflags "-w -s"。这个命令可以隐藏所有代码实现相关的信息,并减少生成文件的大小。其中,-w 可以移除调试信息(无法使用gdb 调试),-s 可以移除符号表
相关推荐
伊灵eLing11 分钟前
GoLang 语言基础
开发语言·后端·golang
踏着七彩祥云的小丑14 分钟前
Go学习第4天:条件、循环语句+函数
学习·golang·go
小小龙学IT2 小时前
Go 后端开发中的并发模式:从 Goroutine 到 Pipeline 实战
开发语言·后端·golang
geovindu3 小时前
go: Coroutines Pattern
开发语言·后端·设计模式·golang·协程模式
秋916 小时前
Go语言(Golang)开发工程师全景解析:岗位职责·语言优势与使用场景·各城市薪资·发展前景·高考志愿填报(2026版)
开发语言·golang·高考
小小龙学IT20 小时前
Go 语言后端开发:从并发模型到生产落地的工程实践
开发语言·后端·golang
oqX0Cazj220 小时前
2026超火Go-Zero实战:从架构原理到高并发接口落地,彻底解决接口超时、雪崩问题
开发语言·架构·golang
go不是csgo1 天前
从0到1理解Go熔断器:sony/gobreaker 源码剖析 + 仿TikTok Feed 项目实战
开发语言·后端·golang
oqX0Cazj21 天前
Go-Zero数据库事务实战:本地事务+失败自动回滚+生产避坑+简单分布式事务方案
数据库·分布式·golang
右耳朵猫AI1 天前
Go周刊2026W22 | GoReleaser 2.16、chi 5.3、tldx 1.4、wazero 1.12、Buf 1.70
开发语言·后端·golang