从源代码安装 Go

本主题介绍如何从源代码构建并运行 Go。 要使用安装程序进行安装,请参阅 下载并安装

介绍

Go 是一个开源项目,基于 BSD 风格许可证 分发。 本文档说明如何获取源代码、在您自己的机器上构建并运行它们。

大多数用户不需要这样做,而是会按照 下载并安装 中的描述, 从预编译的二进制包进行安装,这个过程要简单得多。 不过,如果您想帮助开发那些预编译包的内容,请继续阅读。

Go 有两个官方编译器工具链。 本文档主要关注 gc Go 编译器和工具。 关于如何使用 gccgo(一个更传统的、使用 GCC 后端的编译器)的信息,请参阅 设置和使用 gccgo

Go 编译器支持以下指令集:

amd64, 386
x86 指令集,64 位和 32 位。
arm64, arm
ARM 指令集,64 位 (AArch64) 和 32 位。
loong64
64 位 LoongArch 指令集。
mips64, mips64le, mips, mipsle
MIPS 指令集,大端和小端,64 位和 32 位。
ppc64, ppc64le
64 位 PowerPC 指令集,大端和小端。
riscv64
64 位 RISC-V 指令集。
s390x
IBM z/Architecture。
wasm
WebAssembly

编译器可以面向 AIX、Android、DragonFly BSD、FreeBSD、 Illumos、Linux、macOS/iOS (Darwin)、NetBSD、OpenBSD、Plan 9、Solaris 和 Windows 操作系统(尽管并非所有操作系统 都支持所有架构)。

被视为“一等”的移植版列表可在 一等移植版 Wiki 页面上找到。

支持的完整组合列表在下面的 环境变量 讨论中列出。

请参阅 Go Wiki 的 MinimumRequirements 页面了解 总体系统要求

安装 Go 编译器二进制文件用于引导

Go 工具链是用 Go 编写的。要构建它,您需要安装一个 Go 编译器。 执行工具初始构建的脚本会在 $PATH 中查找 "go" 命令, 因此只要您的系统中安装了 Go 并将其配置在 $PATH 中,您就可以准备从源代码构建 Go 了。 或者,如果您愿意,也可以将 $GOROOT_BOOTSTRAP 设置为 一个现有 Go 安装的根目录,用于构建新的 Go 工具链; $GOROOT_BOOTSTRAP/bin/go 应该是要使用的 go 命令。

所需的最低 Go 版本取决于目标 Go 版本:

有四种可能的方式获取引导工具链:

下面详细介绍这些方法。

从二进制发行版获取引导工具链

要使用二进制发行版作为引导工具链,请参阅 下载页面 或使用任何其他满足最低版本要求的、 打包好的 Go 发行版。

从交叉编译的源代码获取引导工具链

要从源代码交叉编译一个引导工具链,这在 Go 1.4 未面向的系统上是必需的(例如, linux/ppc64le),请在另一个系统上安装 Go 并运行 bootstrap.bash

当以如下方式运行时(例如)

$ GOOS=linux GOARCH=ppc64 ./bootstrap.bash

bootstrap.bash 会为该 GOOS/GOARCH 组合交叉编译一个工具链,将生成的目录树留在 ../../go-${GOOS}-${GOARCH}-bootstrap。 该目录树可以复制到给定目标类型的机器上, 并用作 GOROOT_BOOTSTRAP 来引导本地构建。

使用 gccgo 作为引导工具链

要将 gccgo 用作引导工具链,您需要安排 $GOROOT_BOOTSTRAP/bin/go 是 gccgo 5 附带的 go 工具。 例如在 Ubuntu Vivid 上:

$ sudo apt-get install gccgo-5
$ sudo update-alternatives --set go /usr/bin/go-5
$ GOROOT_BOOTSTRAP=/usr ./make.bash

从 C 源代码获取引导工具链

要从C源代码构建引导工具链,可以使用Git分支release-branch.go1.4或下载go1.4-bootstrap-20171003.tar.gz文件。该文件包含Go 1.4的源代码以及累计的修复补丁,以确保工具能在较新的操作系统上正常运行。(Go 1.4是最后一个用C语言编写工具链的版本。) 解压缩Go 1.4源代码后,请进入src子目录,在环境变量中设置CGO_ENABLED=0,然后运行make.bash(在Windows系统上则运行make.bat)。

一旦将Go 1.4源代码解压到GOROOT_BOOTSTRAP目录,您必须保持此Git克隆实例签出到release-branch.go1.4分支。具体来说,请勿在后续名为"获取代码仓库"的步骤中尝试复用此Git克隆。go1.4引导工具链**必须能够**正确遍历它假定存在于该仓库根目录下的go1.4源代码。

请注意,Go 1.4并非在所有后续版本Go支持的系统上都能运行。特别是,Go 1.4不支持当前版本的macOS。在此类系统上,必须使用其他方法之一来获取引导工具链。

安装Git(如有需要)

执行下一步操作前,您必须安装Git。(继续之前请确认已安装git命令。)

若尚未安装可正常工作的Git,请按照Git下载页面的说明进行安装。

(可选)安装C编译器

要构建支持cgo的Go环境(该功能允许Go程序导入C语言库),必须先安装如gccclang等C编译器。请使用系统标准安装方法进行安装。

若要在不启用cgo的情况下构建,请在运行all.bashmake.bash前设置环境变量CGO_ENABLED=0

获取代码仓库

切换至您计划安装Go的目录,确保goroot目录不存在。然后克隆仓库并签出最新的发布标签或发布分支(例如go1.22.0release-branch.go1.22):

$ git clone https://go.googlesource.com/go goroot
$ cd goroot
$ git checkout <tag>

其中<tag>是发布的版本字符串。

Go将被安装在签出的目录中。例如,若Go签出至$HOME/goroot,可执行文件将安装到$HOME/goroot/bin。目录可以任意命名,但请注意:若Go签出至$HOME/go,将与$GOPATH的默认位置冲突。详见下文GOPATH部分。

提醒:如果您选择在(前面章节中)同时从源代码编译引导二进制文件,在此处仍需再次执行git clone(以签出最新的<tag>),因为您必须保持go1.4仓库的独立性。

若您计划修改Go源代码并向项目提交变更,请将仓库从发布标签切换至主(开发)分支。否则请跳过此步骤。

$ git checkout master

安装Go

要构建Go发行版,请运行:

$ cd src
$ ./make.bash

(在Windows系统下请使用make.bat。)

若一切顺利,将输出类似以下内容:

---
Installed Go for linux/amd64 in /home/you/go.
Installed commands in /home/you/go/bin.
*** You need to add /home/you/go/bin to your $PATH. ***

最后几行的详细信息会反映安装过程中使用的操作系统、架构和根目录。

如需了解更多控制构建过程的方法,请参阅下文环境变量部分的讨论。您也可以运行all.bash(或all.bat)来执行Go的重要测试,这比单纯构建Go需要更多时间。

验证安装

通过构建一个简单程序来检查Go是否安装正确。

创建名为hello.go的文件,并写入以下程序:

package main

import "fmt"

func main() {
	fmt.Printf("hello, world\n")
}

然后使用go工具运行它:

$ go run hello.go
hello, world

若看到"hello, world"消息,则表明Go安装正确。

配置工作环境

您已接近完成。只需再进行一些简单配置。

《如何编写Go代码》 学习如何配置和使用Go工具

《如何编写Go代码》文档提供了使用Go工具的基本配置指南

安装额外工具

多个Go工具(包括gopls)的源代码存放在golang.org/x/tools仓库中。要安装其中某个工具(此处以gopls为例):

$ go install golang.org/x/tools/gopls@latest

社区资源

帮助页面上列出的常用社区资源拥有活跃的开发者,他们可以帮助你解决安装或开发工作中遇到的问题。 对于希望保持更新的用户,还有另一个邮件列表 golang-checkins,它会收到关于每次向 Go 仓库提交代码的汇总消息。

可以通过 Go 问题跟踪器 来报告错误。

跟进版本发布

新版本的发布会在 golang-announce 邮件列表上公布。 每次公告都会提及最新的发行版标签,例如, go1.9

要将现有的源码树更新到最新的发行版,可以运行以下命令:

$ cd go/src
$ git fetch
$ git checkout <tag>
$ ./all.bash

其中 <tag> 是该发行版的版本字符串。

可选的环境变量

Go 工具可以通过环境变量进行定制。 构建过程并不强制要求设置任何环境变量,但你可能会希望设置一些来覆盖默认值。 在运行 make.bash 时设置这些环境变量,将会为新构建的工具设置默认值。 在使用工具时,你可以针对特定的构建覆盖这些默认值,具体说明参见 go 命令文档

请注意,$GOARCH$GOOS 标识的是目标环境,而不是你正在运行的环境。实际上,你始终在进行交叉编译。这里的“架构”指的是目标环境能够运行的二进制文件的类型:例如,一个运行仅支持 32 位操作系统的 x86-64 系统,必须将 GOARCH 设置为 386,而不是 amd64

需要再次强调的是,要构建、安装和开发 Go 源码树,这些变量都不是必须设置的。