Golang 支持交叉编译,即在一个平台编译,在另一个平台运行,本文介绍Golang Pkg 编译相关。
使用
go build
在其他目录执行需要指定包名,在main下不需要
go build -a -x [pkgname|...]
其中:
go build ./...
编译当前目录下所有的源文件,如果启用Go Modules,执行 go build
会把依赖写入 go.mod
中
参数说明
- GOOS: 目标平台
- mac : darwin
- linux : linux
- windows : windows
- GOARCH :目标平台的体系架构
- 386 也称 x86 : 32位操作系统
- amd64 也称 x64 : 64位操作系统,比如电脑一般都是amd64架构的
- arm 一般用于嵌入式开发,比如Android,IOS,Win mobile等
- 交叉编译不支持
CGO_ENABLED
,使用CGO_ENABLED=0
设置。
编译命令
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
# 若是在windows编译,也可以采用如下命令设置变量:
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build
go build tag
使用 go bulid -tag
用来自定义构建配置不同的版本,参考
// +build dev
package main
var version = "DEV"
// +build release
package main
var version = "RELEASE"
package main
import "fmt"
func main() {
fmt.Printf("running %s version", version)
}
go build -tags dev -o main-dev
go build -tags release -o main-release
传参编译
package main
import "fmt"
var version string
func main() {
fmt.Printf("running %s version", version)
}
go build -ldflags '-X main.version="dev"' -o main-dev
go e2e
end2end test 可以通过如下控制,可以使用 go test -tags e2e
运行比较费时的测试,而不加时不允许该测试
//go:build e2e
// +build e2e