Golang需要根据不同的平台编译出对应的可执行文件,在编译的时候需要指定相应的环境变量GOOS和GOARCH即可。

可以用下面命令查看golang支持的系统和处理器指令集架构

1
go tool dist list

下面是输出结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
aix/ppc64
android/386
android/amd64
android/arm
android/arm64
darwin/386
darwin/amd64
darwin/arm
darwin/arm64
dragonfly/amd64
freebsd/386
freebsd/amd64
freebsd/arm
illumos/amd64
js/wasm
linux/386
linux/amd64
linux/arm
linux/arm64
linux/mips
linux/mips64
linux/mips64le
linux/mipsle
linux/ppc64
linux/ppc64le
linux/s390x
nacl/386
nacl/amd64p32
nacl/arm
netbsd/386
netbsd/amd64
netbsd/arm
netbsd/arm64
openbsd/386
openbsd/amd64
openbsd/arm
openbsd/arm64
plan9/386
plan9/amd64
plan9/arm
solaris/amd64
windows/386
windows/amd64
windows/arm

可以看出其支持的系统和架构组合的还是比较多的。一般对于个人计算机来说,其指令集一般都是amd64的,而手机终端以及树莓派的处理器指令集都是Arm的。

在windows系统上编译

下面是在windows平台上用powshell分别编译windows、linux以及macos的可执行文件。

1
2
3
4
5
6
7
8
9
10
11
# 编译linux下的可执行文件
$Env:GOOS = "linux"; $Env:GOARCH = "amd64"
go build -o example_linux_amd64

# 编译windows下的可执行文件
$Env:GOOS = "windows"; $Env:GOARCH = "amd64"
go build -o example_windows_amd64.exe

# 编译macos下的可执行文件
$Env:GOOS = "darwin"; $Env:GOARCH = "amd64"
go build -o example_darwin_amd64

在linux平台上编译

下面是在linux平台上分别编译windows、linux以及macos的可执行文件。

1
2
3
4
5
6
7
8
# 编译windows下的可执行文件
env GOOS=linux GOARCH=amd64 go build -o example_linux_amd64

# 编译windows下的可执行文件
env GOOS=windows GOARCH=amd64 go build -o example_windows_amd64

# 编译macos下的可执行文件
env GOOS=darwin GOARCH=amd64 go build -o example_darwin_amd64