go build
命令,会把当前目录树下的 go 文件编译出来,放在 $GOPATH/pkg
的相应目录中。go 编译出来的可执行文件比较大,因为会包含 go runtime 在其中。
go 的内置库,有一些提供了带 cgo 和不带 cgo 两个版本,参考 Golang: Runtime,有详细描述。Go 默认使用 cgo 版本,如果想不用,可以置环境变量 CGO_ENABLED=0
:
CGO_ENABLED=0 go build
但是并不是 CGO_ENABLED=0
之后,就一定能编出完全无其他依赖的静态二进制文件。比如有些代码依赖 libpcap
,而 libpcap
又没有纯 Go 的实现,那么 CGO_ENABLED=0
是会编译失败的,默认编出来的程序会依赖 libpcap
的动态库。大概率很难编出纯静态的。