Golang具有跨平台编译特性,省去了各个平台装编译环境的麻烦,设置起来也相当简单。
交叉编译
交叉编译主要是两个编译环境参数 $GOOS 和 $GOARCH 的设定。$GOOS代表编译的目标系统,$GOARCH代表编译的处理器体系结构。
$GOOS可选值如下
darwin
dragonfly
freebsd
linux
netbsd
openbsd
plan9
solaris
windows
$GOARCH可选值如下
386
amd64
arm
在编译的时候我们可以根据实际需要对这两个参数进行组合。更详细的说明可以进官网看看
http://golang.org/cmd/go
http://golang.org/pkg/go/build
下面是实际使用。在Linux系统下跨平台编译
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build xxx.go
在Windows系统下跨平台编译
set CGO_ENABLED=0
set GOARCH=386
set GOOS=windows
go build xxx.go
选择性编译
虽然golang 可以跨平台编译,但却无法解决系统的差异性。总在一些时候我们会直接调用操作系统函数。相同功能编写类似xxx_windows.go xxx.Linux.go文件,根据操作系统编译对应源文件。而不是在文件中用if else规划执行路径。 要实现选择性编译需要在文件顶部增加构建标记。
// +build
此标记必须出现在文件顶部,仅由空行或其他注释行开头。也就是必须在Package 语句前。此标记后接约束参数,格式为 // +build A,B !C,D 逗号为且,空格为或,!为非。代表编译此文件需符合 (A且B) 或 ((非C)且D) 。A和C的可选参数可参见本文上面的 $GOOS参数,B和D的可选参数可参见$GOARCH 。比如
// +build !windows,386
//此文件在非windows操作系统 且386处理器时编译
最后, Golang为跨系统运行的确是已经做得够好了。没有C C++的历史包袱,但充分吸取了他们的诸多特点,为加快工作效率损失的软件性能是值得的。