Avatar ·

Как установить последнюю версию Go (Golang) на Ubuntu 22.04 LTS?

Привет, коллеги! Я начинающий Go-разработчик и перешел на Ubuntu 22.04. Пытаюсь установить Go, но через стандартный менеджер пакетов apt ставится очень старая версия 1.18. Мне же нужна актуальная — 1.22 или 1.23, так как я пишу микросервисы с использованием современных фич (например, generics и новые пакеты из стандартной библиотеки). Вот что я делаю:
sudo apt update
sudo apt install golang-go
После этого `go version` показывает `go1.18.1 linux/amd64`. Это неприемлемо, так как многие современные библиотеки требуют версию 1.21+. Пробовал добавлять PPA из интернета, но они часто устаревают или не работают. Подскажите, пожалуйста, надёжный способ установить самую свежую версию Go на Ubuntu, желательно с возможностью автоматического обновления. Также хотелось бы понять, как правильно настроить GOPATH и GOROOT, чтобы не было конфликтов, если я решу держать несколько версий. ОС: Ubuntu 22.04 LTS, архитектура x86_64. Заранее спасибо за помощь! <<>>

Правильный способ: установка через официальный бинарный дистрибутив

Самый надёжный и рекомендованный способ установки последней версии Go на Ubuntu — это скачивание официального архива с golang.org/dl. PPA-репозитории часто отстают или содержат нестабильные сборки, а apt из стандартного репозитория даёт устаревшую версию.

Пошаговая инструкция

  1. Удалите старую версию (если есть):
    sudo apt remove --purge golang-go golang
    sudo rm -rf /usr/local/go /usr/lib/go
  2. Скачайте последнюю версию: Зайдите на официальную страницу загрузок и скопируйте ссылку на архив для Linux (amd64). На момент написания это go1.22.4.linux-amd64.tar.gz.
    wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz
  3. Проверьте контрольную сумму (опционально, но рекомендуется):
    sha256sum go1.22.4.linux-amd64.tar.gz
    # Сравните вывод с хешем на сайте golang.org
  4. Распакуйте архив в /usr/local:
    sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz
  5. Настройте переменные окружения: Добавьте в файл ~/.profile или ~/.bashrc:
    export GOROOT=/usr/local/go
    export GOPATH=$HOME/go
    export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
    Примените изменения:
    source ~/.profile
  6. Проверьте установку:
    go version
    # Должно вывести: go version go1.22.4 linux/amd64

Объяснение переменных

  • GOROOT — путь к установленному Go (бинарники, стандартная библиотека).
  • GOPATH — рабочее пространство для вашего кода и сторонних библиотек (по умолчанию $HOME/go).
  • PATH — чтобы команды go и gofmt были доступны из любого терминала.

Автоматическое обновление

Go не поддерживает автоматические обновления через менеджер пакетов. При выходе новой версии нужно повторять шаги 2-4. Для отслеживания обновлений можно использовать скрипт:

#!/bin/bash
# update_go.sh
LATEST=$(curl -s https://go.dev/VERSION?m=text | head -1)
CURRENT=$(go version | awk '{print $3}')
if [ "$LATEST" != "$CURRENT" ]; then
    echo "Обновление до $LATEST..."
    wget https://go.dev/dl/${LATEST}.linux-amd64.tar.gz
    sudo tar -C /usr/local -xzf ${LATEST}.linux-amd64.tar.gz
    rm ${LATEST}.linux-amd64.tar.gz
fi

Работа с несколькими версиями

Если нужно держать несколько версий, используйте go install golang.org/dl/go1.21.0@latest и переключайтесь через go1.21.0 download. Или просто переименовывайте каталог /usr/local/go при переключении.

Важно: Не используйте sudo apt install golang — это сломает вашу ручную установку. Всегда проверяйте версию после обновления.

<<>>

Альтернативный подход: использование snap-пакета

Если вы не хотите возиться с ручной установкой и предпочитаете автоматические обновления, можно использовать официальный snap-пакет от Canonical:

sudo snap install go --classic

Флаг --classic необходим, так как Go требует полного доступа к файловой системе для компиляции проектов.

Плюсы

  • Автоматические обновления (snap сам проверяет и устанавливает новые версии).
  • Изоляция от системы — не конфликтует с apt-пакетами.
  • Всегда последняя стабильная версия (обычно обновляется в течение 1-2 дней после релиза).

Минусы

  • Snap-пакеты запускаются с задержкой (монтирование squashfs-образа).
  • Не подходит для серверных окружений, где важна минимальная задержка.
  • Иногда возникают проблемы с правами доступа к проектам, расположенным вне домашней директории.

Настройка после установки

После установки через snap Go будет доступен по пути /snap/bin/go. Переменные окружения настраиваются так же, как в основном ответе:

export GOPATH=$HOME/go
export PATH=$GOPATH/bin:/snap/bin:$PATH

Обратите внимание: GOROOT в случае snap не нужен, так как Go лежит в изолированном окружении.

Проверка

go version
# Вывод: go version go1.22.4 linux/amd64

Если версия вас устраивает и вы готовы мириться с небольшим снижением производительности при первом запуске — это хороший вариант для разработки на локальной машине.