Go 提供了很多环境变量用于对 Go 工具进行定制。构建过程并不强制要求设置这些变量,但你可能希望通过设置它们来覆盖默认值。在运行 make.bash 时设置这些环境变量,将会为新构建的工具设定默认值。在使用这些工具时,你可以针对特定的构建覆盖这些默认值,具体方法请参考 go 命令的文档。
$GOROOT: Go 源码树的根目录,通常位于 $HOME/go1.X。当源码树被编译时,这个值会被构建进代码中,默认值为运行 all.bash 所在目录的父目录。除非你想在多个本地代码库副本之间切换,否则无需设置此变量。
$GOOS 和 $GOARCH: 分别指代目标操作系统和编译架构的名称。
$GOOS: 默认值为引导工具链(bootstrap toolchain)中 runtime.GOOS 的值。可选值包括:android, darwin, dragonfly, freebsd, illumos, ios, js, linux, netbsd, openbsd, plan9, solaris, wasip1, windows。$GOARCH: 默认值为下文描述的 $GOHOSTARCH 的值。可选值包括: amd64 (64位 x86,最成熟的端口), 386 (32位 x86), arm (32位 ARM), arm64 (64位 ARM), ppc64le (PowerPC 64位,小端序), ppc64 (PowerPC 64位,大端序), mips64le (MIPS 64位,小端序), mips64 (MIPS 64位,大端序), mipsle (MIPS 32位,小端序), mips (MIPS 32位,大端序), s390x (IBM System z 64位,大端序), wasm (WebAssembly 32位)。$GOOS 和 $GOARCH 的有效组合如下:| $GOOS | $GOARCH |
|---|---|
| aix | ppc64 |
| android | 386, amd64, arm, arm64 |
| darwin | amd64, arm64 |
| dragonfly | amd64 |
| freebsd | 386, amd64, arm |
| illumos | amd64 |
| ios | arm64 |
| js | wasm |
| linux | 386, amd64, arm, arm64, loong64, mips, mipsle, mips64, mips64le, ppc64, ppc64le, riscv64, s390x |
| netbsd | 386, amd64, arm |
| openbsd | 386, amd64, arm, arm64 |
| plan9 | 386, amd64, arm |
| solaris | amd64 |
| wasip1 | wasm |
| windows | 386, amd64, arm, arm64 |
$GOHOSTARCH: 宿主编译架构的名称。默认为本地系统的架构。可选值与上述 $GOARCH 相同。指定的值必须与本地系统兼容。例如,你不应该在 x86 系统上将 $GOHOSTARCH 设置为 arm。
$GO386 (仅适用于 386,默认为 sse2): 此变量控制 gc 编译器如何实现浮点运算。
x86 芯片(Pentium MMX 或更高版本)。SSE2 进行浮点运算;性能更好,但仅适用于 Pentium 4/Opteron/Athlon 64 或更高版本。$GOARM (仅适用于 arm;如果在目标处理器上构建则自动检测,否则默认为 7): 此变量设置运行时所针对的 ARM 浮点协处理器架构版本。如果你是在目标系统上进行编译,其值将被自动检测。如果不确定,请保持此变量未设置,并在首次运行 Go 可执行文件时根据需要调整。Go 社区维基上的 GoARM 页面包含有关 Go ARM 支持的更多细节。
CPU 没有 VFP 协处理器时使用。VFPv1;交叉编译时的默认值;通常用于 ARM11 或更好的核心(也支持 VFPv2 或更好)。VFPv3;通常用于 Cortex-A 核心。$GOARM64 (仅适用于 arm64;默认为 v8.0): 此变量设置要编译的 ARM64 架构版本。有关允许的选项,请参阅 Go 维基的 MinimumRequirements 页面。
$GOAMD64 (仅适用于 amd64;默认为 v1): 此变量设置要编译的微架构级别。有效值为 v1(默认)、v2、v3、v4。有关更多信息,请参阅 Go 维基的 MinimumRequirements 页面。
$GOMIPS (仅适用于 mips 和 mipsle)、$GOMIPS64 (仅适用于 mips64 和 mips64le):
这些变量设置是否使用浮点指令。设置为 hardfloat 以使用浮点指令(这是默认值)。设置为 softfloat 以使用软件浮点。
$GOPPC64 (仅适用于 ppc64 和 ppc64le): 此变量设置编译器将针对的处理器级别(即指令集架构版本)。默认为 power8。
ISA v2.07 指令。ISA v3.00 指令。$GORISCV64 (仅适用于 riscv64): 此变量设置要编译的 RISC-V 用户模式应用程序配置文件。默认为 rva20u64。
RVA20U64 配置文件中强制要求的 RISC-V 扩展。RVA22U64 配置文件中强制要求的 RISC-V 扩展。RVA23U64 配置文件中强制要求的 RISC-V 扩展。$GOWASM (仅适用于 wasm): 此变量是一个以逗号分隔的列表,列出了编译后的 WebAssembly 二进制文件允许使用的实验性 WebAssembly 功能。默认不使用任何实验性功能。
注意:$GOARCH 和 $GOOS 标识的是目标环境,而不是你当前运行的环境。实际上,你总是在进行交叉编译。这里所说的架构,是指目标环境可以运行的二进制文件类型:一个运行着仅支持 32 位操作系统的 x86-64 系统,必须将 $GOARCH 设置为 386,而不是 amd64。
原文地址:


本文作者:蒋固金
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!