Установка Go из исходного кода
В данном разделе описывается, как собрать и запустить Go из исходного кода. Для установки с помощью установщика, см. Download and install.
Введение
Go — это проект с открытым исходным кодом, распространяемый под лицензией в стиле BSD. Данный документ объясняет, как получить исходные тексты, собрать их на собственной машине и запустить.
Большинству пользователей не нужно выполнять эти действия, а вместо этого они будут устанавливать из предварительно скомпилированных бинарных пакетов, как описано в Download and install, что намного более простой процесс. Если же вы хотите помочь в разработке того, что входит в эти предварительно скомпилированные пакеты, то читайте дальше.
Существует два официальных инструментария компилятора Go.
В данном документе делается акцент на компиляторе и инструментах gc Go.
Информация о работе с gccgo, более традиционным компилятором,
использующим движок GCC, содержится в разделе
Setting up and using gccgo.
Компиляторы Go поддерживают следующие наборы инструкций:
-
amd64,386 -
Набор инструкций
x86, 64- и 32-битные. -
arm64,arm -
Набор инструкций
ARM, 64-битный (AArch64) и 32-битный. -
loong64 - 64-битный набор инструкций LoongArch.
-
mips64,mips64le,mips,mipsle -
Набор инструкций
MIPS, с big-endian и little-endian, 64- и 32-битные. -
ppc64,ppc64le - 64-битный набор инструкций PowerPC, с big-endian и little-endian.
-
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 (хотя не все операционные системы поддерживают все архитектуры).
Список портов, которые считаются «первоклассными», доступен на странице first class ports вики.
Полный набор поддерживаемых комбинаций перечислен в обсуждении переменных среды ниже.
См. страницу Go Wiki MinimumRequirements для общих системных требований.
Установка двоичных файлов компилятора Go для запуска
Инструментарий Go написан на Go. Чтобы собрать его, необходимо установить компилятор Go.
Скрипты, выполняющие начальную сборку инструментов, ищут команду go
в $PATH, поэтому, пока у вас установлен и настроен Go в вашей
системе и в $PATH, вы готовы к сборке Go из исходного кода.
Или, если вы предпочитаете, можно установить $GOROOT_BOOTSTRAP в корневую директорию
установки Go, которую следует использовать для сборки новой цепочки инструментов;
$GOROOT_BOOTSTRAP/bin/go должен быть командой go, которую следует использовать.
Минимально необходимая версия Go зависит от целевой версии Go:
- Go <= 1.4: C-инструментарий.
- 1.5 <= Go <= 1.19: компилятор Go 1.4.
- 1.20 <= Go <= 1.21: компилятор Go 1.17.
- 1.22 <= Go <= 1.23: компилятор Go 1.20.
- В дальнейшем, версия Go 1.N будет требовать компилятор Go 1.M, где M — это N-2, округленное вниз до четного числа. Пример: Go 1.24 и 1.25 требуют Go 1.22.
Существует четыре возможных способа получения цепочки инструментов для запуска:
- Загрузить последнюю бинарную версию Go.
- Скомпилировать цепочку инструментов с помощью кросс-компиляции, используя систему с рабочей установкой Go.
- Использовать gccgo.
- Скомпилировать цепочку инструментов из Go 1.4, последнего релиза Go, в котором компилятор был написан на C.
Описанные ниже подходы:
Запуск цепочки инструментов из бинарного релиза
Чтобы использовать бинарный релиз в качестве цепочки инструментов для запуска, см. страницу загрузок или используйте любую другую пакетную поставку 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 в виде команды go, поставляемой
в составе gccgo 5. Например, в 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 clone, проверенным на ветке release-branch.go1.4. В частности, не пытайтесь повторно использовать этот экземпляр git clone на более позднем шаге, который называется «Fetch the repository» (Получить репозиторий). Инструментарий bootstrap для go1.4 должен иметь возможность корректно обходить исходные коды go1.4, которые он предполагает находиться в корневом каталоге этого репозитория.
Обратите внимание, что Go 1.4 не запускается на всех системах, где работают более поздние версии Go. В частности, Go 1.4 не поддерживает современные версии macOS. На таких системах инструментарий bootstrap должен быть получен с использованием одного из других методов.
Установите Git, если он ещё не установлен
Для выполнения следующего шага необходимо иметь установленный Git. (Убедитесь, что команда git доступна перед продолжением.)
Если у вас отсутствует рабочая установка Git, следуйте инструкциям на странице Git downloads (Загрузки Git).
(Необязательно) Установите C-компилятор
Чтобы собрать установку Go с поддержкой cgo, которая позволяет Go-программам импортировать C-библиотеки, необходимо сначала установить C-компилятор, такой как gcc или clang. Сделайте это с использованием стандартного метода установки для вашей системы.
Чтобы собрать без cgo, установите переменную окружения CGO_ENABLED=0 перед запуском all.bash или make.bash.
Получить репозиторий
Перейдите в каталог, в котором вы намерены установить Go, и убедитесь, что каталог goroot не существует. Затем клонируйте репозиторий и переключитесь на последнюю метку релиза или ветку релиза (go1.22.0, или release-branch.go1.22, например):
$ git clone https://go.googlesource.com/go goroot $ cd goroot $ git checkout <span class="versionTag"><i><tag></i></span>
Где <tag> — это строка версии релиза.
Go будет установлен в каталог, в котором он был проверен. Например, если Go проверен в $HOME/goroot, исполняемые файлы будут установлены в $HOME/goroot/bin. Каталог может иметь любое имя, но обратите внимание, что если Go будет проверен в $HOME/go, это приведёт к конфликту с расположением по умолчанию $GOPATH.
См. GOPATH ниже.
Напоминание: если вы решили также скомпилировать двоичные файлы bootstrap из исходного кода (в предыдущем разделе), вы всё равно должны выполнить git clone снова на этом этапе (чтобы переключиться на последнюю <tag>), потому что вы должны сохранить ваш репозиторий go1.4 отдельным.
(Необязательно) Переключиться на master-ветку
Если вы намерены изменять исходный код 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.
Следует отметить, что $GOARCH и $GOOS определяют целевую среду, а не ту, на которой вы выполняете команду. По сути, вы всегда выполняете кросс-компиляцию.
Под архитектурой мы подразумеваем тип бинарных файлов, которые может запустить целевая среда: x86-64 система, на которой установлена операционная система, поддерживающая только 32-битные бинарники, должна установить GOARCH в значение 386, а не amd64.
Если вы решите переопределить значения по умолчанию, установите эти переменные в вашем профиле оболочки ($HOME/.bashrc, $HOME/.profile или эквивалентный файл). Настройки могут выглядеть примерно так:
export GOARCH=amd64 export GOOS=linux
хотя, как уже упоминалось, ни одна из этих переменных не обязательно должна быть установлена для сборки, установки и разработки дерева Go.