从源代码安装 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 操作系统(尽管并非所有操作系统都支持所有架构)。

“一流”端口的列表可在一流端口维基页面上找到。

所有受支持的组合列表在下面的环境变量讨论中列出。

有关整体系统要求,请参阅 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.4go1.4-bootstrap-20171003.tar.gz,其中包含 Go 1.4 源代码以及累积的修复,以使工具在新操作系统上运行。(Go 1.4 是工具链以 C 编写的最后一个发行版。)解压 Go 1.4 源代码后,cdsrc 子目录,在环境中设置 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 库,必须首先安装 C 编译器,例如 gccclang。使用系统上标准的任何安装方法进行安装。

要不带 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 源代码,并将您的更改贡献给项目,那么将您的仓库从发布标签切换到 master(开发)分支。否则,请跳过此步骤。

$ git checkout master

安装 Go

要构建 Go 发行版,请运行

$ cd src
$ ./all.bash

(在 Windows 下构建使用 all.bat。)

如果一切顺利,它将以打印以下输出结束

ALL TESTS PASSED

---
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 需要更多时间。如果您不想运行测试套件,请改用 make.bash(或 make.bat)。

测试您的安装

通过构建一个简单的程序来检查 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 编译环境可以通过环境变量进行自定义。构建不需要任何变量,但您可能希望设置一些变量来覆盖默认值。

请注意,$GOARCH$GOOS 标识的是目标环境,而不是您正在运行的环境。实际上,您始终在进行交叉编译。通过架构,我们指的是目标环境可以运行的二进制文件的种类:运行 32 位操作系统的 x86-64 系统必须将 GOARCH 设置为 386,而不是 amd64

如果您选择覆盖默认值,请在您的 shell 配置文件($HOME/.bashrc$HOME/.profile 或等效文件)中设置这些变量。设置可能看起来像这样

export GOARCH=amd64
export GOOS=linux

尽管,再次重申,构建、安装和开发 Go 树不需要设置这些变量中的任何一个。