2026-10-14
Go
00

可以通过环境变量对 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 的可选值包括: 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 编译器如何实现浮点运算。 GO386=softfloat: 使用软件浮点运算;应支持所有 x86 芯片(Pentium MMX 或更高版本)。 GO386=sse2: 使用 SSE2 进行浮点运算;性能更好,但仅适用于 Pentium 4/Opteron/Athlon 64 或更高版本。

GOARM (仅适用于 arm;如果在目标处理器上构建则自动检测,否则默认为 7) 此变量设置运行时所针对的 ARM 浮点协处理器架构版本。如果你是在目标系统上进行编译,其值将被自动检测。 GOARM=5: 使用软件浮点;当 CPU 没有 VFP 协处理器时使用。 GOARM=6: 仅使用 VFPv1;交叉编译时的默认值;通常用于 ARM11 或更好的核心(也支持 VFPv2 或更好)。 GOARM=7: 使用 VFPv3;通常用于 Cortex-A 核心。 如果不确定,请保持此变量未设置,并在首次运行 Go 可执行文件时根据需要调整。Go 社区维基上的 GoARM 页面包含有关 Go ARM 支持的更多细节。

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。 GOPPC64=power8: 生成 ISA v2.07 指令。 GOPPC64=power9: 生成 ISA v3.00 指令。

GORISCV64 (仅适用于 riscv64) 此变量设置要编译的 RISC-V 用户模式应用程序配置文件。默认为 rva20u64。 GORISCV64=rva20u64: 仅使用 RVA20U64 配置文件中强制要求的 RISC-V 扩展。 GORISCV64=rva22u64: 仅使用 RVA22U64 配置文件中强制要求的 RISC-V 扩展。 GORISCV64=rva23u64: 仅使用 RVA23U64 配置文件中强制要求的 RISC-V 扩展。

GOWASM (仅适用于 wasm) 此变量是一个以逗号分隔的列表,列出了编译后的 WebAssembly 二进制文件允许使用的实验性 WebAssembly 功能。默认不使用任何实验性功能。 GOWASM=satconv: 生成饱和(非陷阱)浮点到整数的转换。 GOWASM=signext: 生成符号扩展运算符。

注意:GOARCH 和 $GOOS 标识的是目标环境,而不是你当前运行的环境。实际上,你总是在进行交叉编译。这里所说的架构,是指目标环境可以运行的二进制文件类型:一个运行着仅支持 32 位操作系统的 x86-64 系统,必须将 GOARCH 设置为 386,而不是 amd64。

重申一遍,为了构建、安装和开发 Go 源码树,不需要设置上述任何变量。

需要我帮你整理一下实际开发中最常用的几个环境变量配置建议吗?比如 GOAMD64、GOARM 这些怎么设比较合适。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:蒋固金

本文链接:

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