go 命令
go build
go build,是我们非常常用的命令,它可以启动编译,把我们的包和相关的依赖编译成一个可执行的文件。
go help build 帮助命令
go build go build . go build test.go
以上这三种写法,都是使用当前目录编译的意思。因为我们忽略了packages
,所以自然就使用当前目录进行编译。
go build shhnwagjian.com.cn/tools
这种方式是指定包的方式,这样会明确的编译我们这个包。
go build shhnwangjian.com.cn/tools/...
3个点表示匹配所有字符串,这样go build
就会编译tools目录下的所有包。
Go提供了编译链工具,可以让我们在任何一个开发平台上,编译出其他平台的可执行文件。
默认情况下,都是根据我们当前的机器生成的可执行文件,比如你的是Linux 64位,就会生成Linux 64位下的可执行文件,可以使用go env查看编译环境,以下截取重要的部分。
两个重要的环境变量GOOS和GOARCH,其中GOOS指的是目标操作系统。GOOS和GOARCH组合起来,支持生成的可执行程序种类很多,具体组合参考如下
https://golang.org/doc/install/source#environment
官方介绍:
Choices for $GOOS
are darwin
(Mac OS X 10.8 and above and iOS), dragonfly
, freebsd
, linux
, netbsd
, openbsd
,plan9
, solaris
and windows
.
Choices for $GOARCH
are amd64
(64-bit x86, the most mature port), 386
(32-bit x86), arm
(32-bit ARM), arm64
(64-bit ARM), ppc64le
(PowerPC 64-bit, little-endian), ppc64
(PowerPC 64-bit, big-endian), mips64le
(MIPS 64-bit, little-endian), and mips64
(MIPS 64-bit, big-endian). mipsle
(MIPS 32-bit, little-endian), and mips
(MIPS 32-bit, big-endian).
GOOS=linux GOARCH=amd64 go build flysnow.org/hello
上面命令生成linux 64位的程序。
除了GOOS和GOARCH常用,在实际开发中,对于开发出的程序会显示编译时间、go版本等属性,我们会用到用ldflags设置变量的值
GOOS=linux GOARCH=amd64 go build -ldflags "-X 'main.BUILD_TIME=`date "+%F %T"`' -X 'main.GO_VERSION=`go version`'" .
代码中需要引入变量
var ( BUILD_TIME string GO_VERSION string ) func usage() { fmt.Fprintf(os.Stderr, `Options: Build Time: %v Go Version: %v `, BUILD_TIME, GO_VERSION) flag.PrintDefaults() }