从源代码安装 Go

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

简介

Go 是一个开源项目,在 BSD 样式许可 下分发。本文档解释了如何检出源代码、在您自己的机器上构建它们以及运行它们。

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

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

Go 编译器支持以下指令集

amd64386
x86 指令集,64 位和 32 位。
arm64arm
ARM 指令集,64 位 (AArch64) 和 32 位。
loong64
64 位 LoongArch 指令集。
mips64mips64lemipsmipsle
MIPS 指令集,大端和小端,64 位和 32 位。
ppc64ppc64le
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.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 的 Go 安装程序,请在运行 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
$ ./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 树不需要设置任何这些变量。