從原始碼安裝 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.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 目錄樹不需要設定這些變數中的任何一個。