Как собрать Go из исходного кода в Ubuntu 16.04

Вступление

Go - это современный язык программирования с открытым исходным кодом, разработанный Google. Это просто и имеет надежный набор библиотек и инструментов, который позволяет легко создавать надежные и эффективные приложения.

Если вы хотите протестировать свое приложение Go на последней версии языка, внести свой вклад в базу кода Go или улучшить управление версиями Go, вам нужно будет собрать Go из исходного кода. Этот учебник покажет вам, как собрать Go, охватит некоторые практические вопросы и создаст тестовое приложение «Hello, World».

Предпосылки

Чтобы следовать этому уроку, вам понадобится:

Шаг 1 - Установка зависимостей сборки

Перед началом убедитесь, что ваш кэш репозитория обновлен.

sudo apt-get update

По умолчанию Ubuntu не содержит всех пакетов, необходимых для сборки Go, таких как компиляторы, библиотеки и инструменты. Легко установить зависимости сборки и компиляции, установив + build-essential +, пакет, включающий + gcc + для компиляции C, + g +` для компиляции C и `+ make +, инструмент автоматизации сборки.

sudo apt-get install build-essential

После завершения установки у вас будут все необходимые инструменты для сборки Go из исходного кода. Далее вам понадобятся файлы Go 1.4.

Шаг 2 - Установка Go 1.4.3

Для сборки Go 1.5+ требуется версия 1.4. Это потому, что цепочки инструментов для Go 1.5+ написаны на самом Go. Вы можете использовать Go 1.4 или любую другую версию (1.4.1, 1.4.2 или 1.4.3); В этом уроке мы будем использовать Go 1.4.3.

Двоичные файлы Go с контрольными суммами SHA1 можно найти на странице загрузки Go. Загрузите файл с именем + go1.4.3.linux-amd64.tar.gz + в свой домашний каталог.

cd ~
curl -O https://storage.googleapis.com/golang/

Несмотря на то, что этот файл был загружен из подлинного источника, по-прежнему рекомендуется проверять целостность загруженного файла. Это проще всего сделать, сравнив хэш файла, представленный на странице загрузок, и хэш загруженного файла.

Сначала получите хеш файла, который вы скачали.

sha1sum go1.4.3.linux-amd64.tar.gz

Сравните вывод этой команды с предоставленной контрольной суммой на странице загрузки Go.

Output332b64236d30a8805fc8dd8b3a269915b4c507fe  go1.4.3.linux-amd64.tar.gz

Если контрольные суммы совпадают, вы можете распаковать файлы.

tar xvf go1.4.3.linux-amd64.tar.gz

Флаг + x + обозначает тракт e X , + v + говорит + tar + использовать V erbose output (т.е. для получения списка извлекаемых файлов), а + f + позволяет нам указать псевдоним F .

Go 1.4 теперь распаковывается в каталог с именем + go +, но скрипт сборки Go ищет бинарные файлы Go 1.4 в + ~ / go1.4 + по умолчанию. Переименуйте каталог, используя команду + mv +.

mv go go1.4

Теперь у вас есть необходимые зависимости для сборки Go из исходного кода. Если вы хотите переместить Go 1.4 из вашего домашнего каталога в другое место, вы можете выполнить следующий шаг. Если нет, вы можете перейти к шагу 4, чтобы клонировать источники Go.

Шаг 3 - Перемещение Go 1.4.3 (необязательно)

Когда скрипт сборки Go запускается, он ищет Go 1.4 на основе переменной окружения с именем + GOROOT_BOOTSTRAP +. Если эта переменная не установлена, что по умолчанию, сценарий сборки будет считать, что каталог + go1.4 + находится в вашем домашнем каталоге. Вы можете использовать переменную + GOROOT_BOOTSTRAP, если вы хотите переместить Go 1.4 в другое место. Здесь мы переместим его в + / usr / local / go1.4 +.

Сначала переместите сам каталог.

sudo mv go1.4

Затем вам нужно установить путь в вашей среде, изменив файл + ~ / .profile +.

sudo nano ~/.profile

В конце файла добавьте следующую строку:

~ / .Profile

. . .
export GOROOT_BOOTSTRAP=go1.4

Сохраните файл и выйдите. Чтобы изменения вступили в силу, обновите свой профиль.

source ~/.profile

Далее вы будете клонировать исходники Go.

Шаг 4 - Получение Go источников

Рекомендуемое расположение для хранения двоичных файлов Go - + / usr / local +, и это то, что мы будем использовать в этом руководстве. Тем не менее, вы можете хранить его где угодно.

Перейдите в + / usr / local + и используйте Git для клонирования хранилища.

cd
sudo git clone https://go.googlesource.com/go

Нам нужно выполнить + git clone с правами root, поскольку` + / usr / local` принадлежит * root *. Если вы клонируете Перейти в каталог, где у вашего пользователя есть права на запись, вы можете запустить эту команду без sudo.

После успешного завершения клона он создаст каталог + go + в + / usr / local. Переместитесь в этот каталог.

cd go

Перед сборкой нам нужно выбрать, какую версию Go мы хотим.

Шаг 5 - Выбор версии Go

Исходники Go имеют разные ветки Git для каждой доступной версии. Названия филиалов:

  • + master + для последней версии в разработке

  • + go + для стабильных версий

Здесь мы будем использовать Go 1.7.4, что означает, что мы хотим использовать ветку + go1.7.4 +.

Чтобы изменить ветки, используйте команду + git checkout +. Вам необходимо запускать эти команды с правами суперпользователя, поскольку + / usr / local и` + / usr / local / go 1.4 + `принадлежат * root *.

sudo git checkout

Выполнив этот шаг, вы загрузили исходный код Go предпочитаемой версии. Вы готовы перейти к ключевой части этого урока: сборка самого Go.

Шаг 6 - Строительство Go

Для сборки go вам необходимо выполнить скрипт bash + src / all.bash +, который поставляется с исходным кодом. Сценарий проверит наличие всех необходимых зависимостей, выполнит несколько тестов и завершит сборку.

Выполните сценарий, но учтите, что если вы изменили расположение двоичных файлов Go 1.4.3, вам нужно будет добавить флаг + -E + (т.е. + sudo -E bash. / all.bash +) для сохранения переменных среды.

cd src
sudo bash ./all.bash

Сценарий займет короткое время, чтобы закончить. Как только сборка будет завершена, вы увидите следующий вывод:

Output of src/all.bashALL TESTS PASSED

---
Installed Go for linux/amd64 in /usr/local/go
Installed commands in /usr/local/go/bin
*** You need to add /usr/local/go/bin to your PATH.

Теперь, когда Go собран, вам нужно установить некоторые переменные окружения для него.

Шаг 7 - Установка переменных Go

Переменные среды являются мощным способом настройки установки Go. Мы пройдемся по самым важным и полезным.

Чтобы начать использовать Go, вам нужно добавить путь к двоичным файлам Go, + go / bin +, в переменные окружения + PATH + и + GOPATH +. + GOPATH + - это место, где хранятся код приложения и двоичные файлы Go, которые мы будем указывать как + ~ / work +, хотя вы можете это настроить самостоятельно.

Добавьте эти переменные в файл + ~ / .profile. Откройте его в вашем любимом текстовом редакторе:

nano ~/.profile

В конце файла добавьте следующие строки:

~ / .Profile

. . .
export GOPATH=
export PATH=$PATH:go/bin:$GOPATH/bin

Если вы установили Go по пути не по умолчанию, т.е. что-то другое, чем + / usr / local / go +, вам нужно определить переменную + GOROOT +. В этом случае добавьте также следующие строки:

~ / .Profile

export GOROOT=
export GOPATH=
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Сохраните файл и выйдите. Чтобы эти изменения вступили в силу, обновите свой профиль.

source ~/.profile

После успешного завершения этого шага у вас будет полнофункциональная установка Go. Далее, мы проверим это, чтобы убедиться, что все работает как ожидалось.

Шаг 8 - Тестирование установки Go

Обычный способ проверить, что Go работает - это написать и запустить простое приложение «Hello, World».

Для этого сначала создадим и переместим в каталог для файлов приложения, основанный на вашем + GOPATH +. Вы можете выбрать все, что вам нравится, в вашем пути Go, но в качестве примера мы настроим иерархию, которая вам понадобится, если вы https://github.com/golang/go/wiki/GithubCodeLayout[use GitHub управлять вашим кодом. Эта иерархия будет работать даже без учетной записи GitHub.

mkdir -p $GOPATH/src/github.com//test_project
cd $GOPATH/src/github.com//test_project

Затем создайте Go-файл «Hello, World» с именем + hello.go +.

nano hello.go

Добавьте следующий код в файл:

hello.go

package main

import "fmt"

func main() {
   fmt.Printf("Hello World!\n")
}

В этом примере используется пакет + fmt +, который реализует функции ввода-вывода, такие как + Printf () +, и определяет функцию + main () +, которая будет печатать * Hello World * при запуске программы.

Сохраните его и выйдите из файла, затем скомпилируйте его с помощью команды Go + install.

go install github.com//test_project

Когда компиляция завершится, вы можете запустить ее с помощью следующей команды:

hello

Вы увидите напечатанный на терминале * Hello World! *, Что означает, что ваша установка Go работает.

Шаг 9 - Изменение версий Go (необязательно)

Этот учебник создан Go 1.7.4. Если вы хотите использовать другую версию, вам нужно изменить активную ветку Git и пересобрать Go.

Чтобы проверить текущую версию Go, вы можете использовать + go version +.

go version
Outputgo version go1.7.4 linux/amd64

В качестве примера, мы перейдем на версию Go до 1.6.4. Эта версия находится в ветке + go1.6.4 +, так что переключитесь на нее.

cd /go
sudo git checkout

Чтобы убедиться, что все обновлено, запустите + git pull, чтобы получить последние изменения для выбранной ветви.

sudo git pull origin

Теперь запустите скрипт сборки, как и прежде, убедившись, что добавили флаг + -E +, если вы переместили Go 1.4 на шаге 3.

cd src
sudo bash ./all.bash

Это займет некоторое время, чтобы закончить. Когда сборка будет завершена, вы увидите следующий вывод:

Output of src/all.bashALL TESTS PASSED

---
Installed Go for linux/amd64 in /usr/local/go
Installed commands in /usr/local/go/bin
*** You need to add /usr/local/go/bin to your PATH.

У вас уже есть переменные Go, настроенные в + ~ / .profile из шага 5, так что это все, что вам нужно сделать, чтобы изменить версии.

Заключение

Благодаря созданию исходных текстов и настройке путей у вас теперь есть отличная база для разработки и тестирования приложений Go или внесения вклада в базу кода Go.

Чтобы узнать больше, вы можете изучить how для начала работы с Go или https: // www. digitalocean.com/community/tutorials/how-to-use-martini-to-serve-go-applications-behind-an-nginx-server-on-ubuntu[how для обслуживания приложений Go с помощью Martini], который представляет собой сеть Go фреймворк. Если вы ищете вдохновение для участия в открытом исходном коде Go, вы можете прочитать о go-qemu и go-libvirt проекты.

Related