Go (часто называют Golang) — это современный компилируемый язык программирования от Google, который славится своей простотой, высокой производительностью и отличной поддержкой конкурентности (горутины). Он идеально подходит для создания веб-серверов, сетевых утилит, облачных приложений и CLI-инструментов. Сложность установки на Debian в том, что версия в официальных репозиториях (apt) может быть сильно устаревшей: на Debian 11 это Go 1.15 (вышел в 2020 году), на Debian 12 — Go 1.19 (2022 год). Разработчикам часто нужна более свежая версия, а установка из tarball или исходников требует настройки переменной PATH.
💡 В этом руководстве мы разберём три способа установки Go на Debian: через APT (проще всего, но версия старше), из официального tarball (рекомендованный способ для разработчиков) и сборку из исходников (для энтузиастов, которым нужно патчить сам компилятор). Вы также узнаете, как настроить PATH, проверить установку на тестовой программе и решить типичные проблемы.
В этой статье вы узнаете:
- Какой способ установки выбрать в зависимости от ваших задач
- Как установить Go через APT (для консервативных пользователей)
- Как установить Go из официального tarball (актуальная версия)
- Как собрать Go из исходников (для тех, кто падает компилятор)
- Как настроить PATH для tarball и source-сборок
- Как проверить установку на тестовой программе
- Как решить типичные проблемы: конфликт версий,
go: command not found, отсутствиеgcc
Для кого: разработчики на Go, системные администраторы, которые компилируют Go-проекты, а также все, кому нужна актуальная версия Go на Debian 11, 12 или 13.
1. 🔧 Предварительные требования
Перед установкой убедитесь, что:
- У вас установлена Debian 11, 12 или 13
- Подключение к интернету стабильно
- Вы знаете, нужна ли вам самая свежая версия Go или достаточно версии из репозитория
⚠️ ВАЖНО: Проверьте права sudo перед установкой
Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:
sudo whoami
Что делает: sudo выполняет команду от имени суперпользователя, whoami показывает имя текущего пользователя.
Зачем: Эта команда проверяет, есть ли у вас права sudo. Без них вы не сможете устанавливать пакеты через APT.
✅ Если выводит root — всё в порядке, можете продолжать.
❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.
1.1 Обновление системы
Перед установкой всегда обновляйте список пакетов:
sudo apt update && sudo apt upgrade -y
Что делает:
sudo— права суперпользователяapt update— обновляет список доступных пакетов из репозиториев&&— выполняет следующую команду только если предыдущая успешнаapt upgrade -y— обновляет все установленные пакеты до последних версий
Зачем: Это стандартная практика безопасности перед установкой нового ПО.
1.2 Установка вспомогательных утилит (для tarball и source-сборки)
Для скачивания и распаковки tarball, а также для сборки из исходников понадобятся дополнительные инструменты.
sudo apt install ca-certificates curl tar git gcc -y
Что делает:
ca-certificates curl— для безопасного скачивания файлов по HTTPStar— для распаковки архивовgit— для клонирования репозитория Go (нужен для source-сборки)gcc— компилятор C, необходим для сборки Go из исходников и для работы некоторых Go-пакетов с cgo
Зачем: Без этих пакетов установка из tarball или исходников будет невозможна.
2. 📊 Сравнение способов установки Go
В Debian есть три основных способа установки Go. Вот их сравнение:
| Метод | Откуда | Пример версии (Debian 12) | Обновления | Плюсы | Минусы |
|---|---|---|---|---|---|
| APT | Репозитории Debian | 1.19.x | Через apt upgrade | Простота, безопасность, минимум усилий | Очень старые версии на Debian 11 и 12 |
| Официальный tarball | go.dev | Последняя стабильная (1.24.x) | Вручную (переустановка) | Свежая версия, не требует компиляции | Нужно вручную обновлять и настраивать PATH |
| Сборка из исходников | Исходный код Go | Последняя стабильная | Вручную (пересборка) | Максимальный контроль, можно патчить | Долго, сложно, требует много места |
💡 Рекомендация: Для большинства разработчиков лучший выбор — официальный tarball. Вы получаете самую свежую версию Go без необходимости компилировать, а настройка PATH делается один раз. APT используйте только если версия Go в вашем Debian устраивает. Сборку из исходников оставьте для энтузиастов, которым нужно патчить сам компилятор.
3. 📦 Способ 1: Установка Go через APT (проще всего, но версия старше)
Этот способ подходит, если версия Go в вашем Debian устраивает. Вот какие версии вы получите:
| Версия Debian | Версия Go в репозитории |
|---|---|
| Debian 13 (Trixie) | 1.24.x |
| Debian 12 (Bookworm) | 1.19.x |
| Debian 11 (Bullseye) | 1.15.x |
⚠️ Важно: Go 1.15 (Debian 11) вышел в августе 2020 года. Многие современные проекты требуют версию не ниже 1.19 или 1.21. Если вам нужна актуальная версия — используйте tarball.
3.1 Установка пакета
sudo apt install golang-go -y
Что делает: Устанавливает Go из официальных репозиториев Debian. Пакет называется golang-go, но команда будет просто go.
Проверка установки:
go version
✅ Ожидаемый вывод в терминале (Debian 12):
go version go1.19.8 linux/amd64
3.2 Особенности APT-установки
- Не нужно настраивать PATH — Go уже в системе (
/usr/bin/go). - Обновления приходят вместе с системными обновлениями (
sudo apt upgrade). - Версия останется той, что в Debian, до следующего релиза дистрибутива.
4. 📦 Способ 2: Установка Go из официального tarball (рекомендованный)
Этот способ подходит для разработчиков, которым нужна актуальная версия Go. Вы скачаете готовый бинарный архив с go.dev и установите его в /usr/local/go.
4.1 Определение архитектуры системы
dpkg --print-architecture
Что делает: Показывает архитектуру вашего процессора.
Что ищем:
amd64— 64-битные Intel/AMD (самый распространённый вариант)arm64— для Raspberry Pi 4/5 и подобныхi386— для старых 32-битных систем
4.2 Автоматическое скачивание и установка последней версии
Этот скрипт сам определяет последнюю версию Go, скачивает нужный tarball для вашей архитектуры и устанавливает его.
# Определяем последнюю версию Go
GO_VERSION=$(curl -fsSL https://go.dev/dl/?mode=json 2>/dev/null | sed -n '/"version"/{s/.*"version": "\(go[0-9.]*\)".*/\1/p;q;}')
# Определяем архитектуру и формируем имя файла
case "$(dpkg --print-architecture)" in
amd64) GO_ARCH=amd64 ;;
arm64) GO_ARCH=arm64 ;;
i386) GO_ARCH=386 ;;
*) echo "Архитектура не поддерживается автоматически. Скачайте tarball вручную с https://go.dev/dl/" && exit 1 ;;
esac
GO_TARBALL="${GO_VERSION}.linux-${GO_ARCH}.tar.gz"
# Скачиваем tarball
echo "Скачиваю ${GO_TARBALL}..."
curl -fL --progress-bar -o "/tmp/${GO_TARBALL}" "https://go.dev/dl/${GO_TARBALL}"
# Удаляем старую установку (если есть)
sudo rm -rf /usr/local/go
# Распаковываем в /usr/local
sudo tar -C /usr/local -xzf "/tmp/${GO_TARBALL}"
# Удаляем скачанный архив
rm -f "/tmp/${GO_TARBALL}"
echo "Go ${GO_VERSION} установлен в /usr/local/go"
Что делает по шагам:
- Запрашивает последнюю версию Go через официальный API
- Определяет архитектуру процессора
- Скачивает нужный tarball во временную директорию
- Удаляет старую установку (если она была)
- Распаковывает новый tarball в
/usr/local/go - Удаляет скачанный архив
Проверка установки (прямой путь, без PATH):
/usr/local/go/bin/go version
✅ Ожидаемый вывод в терминале:
go version go1.24.4 linux/amd64
4.3 Настройка PATH (обязательно!)
Чтобы команда go работала из любого места, нужно добавить /usr/local/go/bin в переменную PATH.
Добавление PATH в ~/.profile (рекомендовано):
grep -q '/usr/local/go/bin' ~/.profile || echo 'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin' >> ~/.profile
source ~/.profile
Что делает:
grep -qпроверяет, есть ли уже такая строка в~/.profileecho ... >>добавляет строку в конец файла, если её там нетsource ~/.profileприменяет изменения в текущем терминале
Проверка, что Go теперь в PATH:
command -v go
✅ Ожидаемый вывод: /usr/local/go/bin/go
Проверка версии:
go version
5. 🔧 Способ 3: Сборка Go из исходников (для энтузиастов)
Этот способ подходит только если вы планируете патчить сам компилятор Go или тестировать невыпущенные версии. Для обычной разработки используйте tarball.
⚠️ Важно: Сборка из исходников требует:
- Установленного Go (для загрузки!) — используется как bootstrap
- Около 10-15 минут времени
- Около 2-3 ГБ свободного места
5.1 Установка инструментов (ещё раз проверим)
sudo apt install git gcc -y
5.2 Установка bootstrap Go (если ещё не установлен)
Для сборки Go из исходников нужен уже установленный Go (странно, но факт). Самый простой способ — установить официальный tarball по инструкции из раздела 4.
# Устанавливаем tarball (если ещё не сделали)
# См. раздел 4.2
5.3 Клонирование репозитория и сборка
# Определяем последнюю версию
GO_VERSION=$(curl -fsSL https://go.dev/dl/?mode=json 2>/dev/null | sed -n '/"version"/{s/.*"version": "\(go[0-9.]*\)".*/\1/p;q;}')
# Удаляем старый исходник (если есть)
rm -rf "$HOME/goroot-src"
# Клонируем репозиторий
git clone --depth 1 --branch "$GO_VERSION" https://go.googlesource.com/go "$HOME/goroot-src"
# Переходим в директорию с исходниками и собираем
cd "$HOME/goroot-src/src"
export GOROOT_BOOTSTRAP=/usr/local/go
./make.bash
Что делает:
git clone --depth 1— клонирует только последний коммит (экономит время и место)export GOROOT_BOOTSTRAP— указывает, где взять Go для сборки./make.bash— запускает скрипт сборки
✅ Ожидаемый вывод в конце сборки:
Installed Go for linux/amd64 in /home/username/goroot-src
Installed commands in /home/username/goroot-src/bin
*** You need to add /home/username/goroot-src/bin to your PATH. ***
5.4 Настройка PATH для source-сборки
grep -q '/goroot-src/bin' ~/.profile || echo 'export PATH=$PATH:$HOME/goroot-src/bin:$HOME/go/bin' >> ~/.profile
source ~/.profile
5.5 Проверка
go version
6. 🧪 Проверка установки: тестовая программа
После установки Go любым способом стоит убедиться, что он работает. Для этого мы создадим и запустим простую программу.
6.1 Создание тестового модуля
mkdir -p ~/go-hello && cd ~/go-hello
go mod init hello
Что делает: go mod init hello создаёт файл go.mod — модуль Go.
✅ Ожидаемый вывод:
go: creating new go.mod: module hello
6.2 Написание кода
cat <<'EOF' > hello.go
package main
import "fmt"
func main() {
fmt.Println("Hello, World from Go!")
}
EOF
6.3 Запуск
go run hello.go
✅ Ожидаемый вывод:
Hello, World from Go!
Если вы видите эту строку — Go установлен и работает корректно.
6.4 Очистка
cd ~ && rm -rf ~/go-hello
7. 🔄 Обновление Go
Для APT-версии
sudo apt update
sudo apt install --only-upgrade golang-go -y
Для tarball-версии
Просто повторите шаги из раздела 4.2. Скрипт сам скачает и установит последнюю версию, заменив старую.
Для source-сборки
Для удобства создадим скрипт обновления:
cat > ~/update-go-source.sh << 'EOF'
#!/usr/bin/env bash
set -euo pipefail
SOURCE_DIR="$HOME/goroot-src"
BOOTSTRAP_ROOT="/usr/local/go"
# Проверяем, есть ли исходники
if [ ! -d "$SOURCE_DIR/.git" ]; then
echo "Ошибка: исходники не найдены. Сначала соберите Go из исходников."
exit 1
fi
# Проверяем, есть ли bootstrap
if [ ! -x "$BOOTSTRAP_ROOT/bin/go" ]; then
echo "Ошибка: bootstrap Go не найден в $BOOTSTRAP_ROOT"
exit 1
fi
# Определяем последнюю версию
LATEST_TAG=$(curl -fsSL https://go.dev/dl/?mode=json 2>/dev/null | sed -n '/"version"/{s/.*"version": "\(go[0-9.]*\)".*/\1/p;q;}')
CURRENT_TAG=$(git -C "$SOURCE_DIR" describe --tags --exact-match 2>/dev/null || echo "none")
echo "Текущая версия: $CURRENT_TAG"
echo "Последняя версия: $LATEST_TAG"
if [ "$CURRENT_TAG" = "$LATEST_TAG" ]; then
echo "Go уже последней версии."
exit 0
fi
# Обновляем исходники и пересобираем
git -C "$SOURCE_DIR" fetch --tags
git -C "$SOURCE_DIR" checkout "$LATEST_TAG"
cd "$SOURCE_DIR/src"
export GOROOT_BOOTSTRAP="$BOOTSTRAP_ROOT"
./make.bash
echo "Go обновлён до $LATEST_TAG"
EOF
chmod +x ~/update-go-source.sh
Запуск обновления:
~/update-go-source.sh
8. ⚠️ Решение типичных проблем
8.1 Ошибка: go: command not found
Симптом: После установки tarball или source-сборки команда go не найдена.
Причина: Директория с бинарным файлом Go не добавлена в PATH.
Пошаговое решение:
Шаг 1: Проверьте, существует ли бинарный файл:
ls /usr/local/go/bin/go
Если файл есть — проблема в PATH.
Шаг 2: Добавьте PATH временно:
export PATH=$PATH:/usr/local/go/bin
Шаг 3: Проверьте, что Go работает:
go version
Шаг 4: Сделайте изменение постоянным:
echo 'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin' >> ~/.profile
source ~/.profile
8.2 Конфликт версий: после установки tarball показывает старую версию
Симптом: Вы установили tarball, но go version всё ещё показывает старую версию (например, из APT).
Причина: В PATH первым находится /usr/bin/go (APT-версия).
Пошаговое решение:
Шаг 1: Посмотрите, какие Go установлены:
which -a go
✅ Пример вывода:
/usr/bin/go
/usr/local/go/bin/go
Шаг 2: Удалите APT-версию, если она не нужна:
sudo apt purge golang-go -y
sudo apt autoremove -y
Шаг 3: Или измените порядок PATH (но проще удалить APT-версию).
8.3 Ошибка: gcc: command not found при сборке Go-проекта
Симптом: При запуске go run или go build появляется ошибка:
# runtime/cgo
gcc: command not found
Причина: Отсутствует компилятор C (gcc), который нужен для работы cgo (часть Go для вызова C-кода).
Решение:
sudo apt install gcc -y
8.4 Ошибка: tar: Cannot open: No such file or directory
Симптом: При распаковке tarball появляется ошибка:
tar: Cannot open: No such file or directory
Причина: Файл не скачался (возможно, из-за проблем с сетью).
Пошаговое решение:
Шаг 1: Проверьте, существует ли файл:
ls -la /tmp/go*.tar.gz
Шаг 2: Если файла нет — повторите скачивание вручную:
curl -L -o /tmp/go.tar.gz https://go.dev/dl/go1.24.4.linux-amd64.tar.gz
(Замените версию и архитектуру на нужные.)
Шаг 3: Повторите распаковку.
9. ❌ Удаление Go
Удаление APT-версии
sudo apt purge golang-go golang-src -y
sudo apt autoremove -y
Удаление tarball-версии
sudo rm -rf /usr/local/go
Удаление PATH из ~/.profile:
sed -i '\|/usr/local/go/bin|d' ~/.profile
source ~/.profile
Удаление source-сборки
rm -rf "$HOME/goroot-src"
Удаление PATH из ~/.profile:
sed -i '\|/goroot-src/bin|d' ~/.profile
source ~/.profile
Удаление workspace (модули и скомпилированные бинарники)
⚠️ Осторожно: Удаляет все ваши Go-проекты и скачанные модули.
rm -rf "$HOME/go"
Проверка удаления
command -v go
✅ Ожидаемый вывод: Пустая строка (если Go больше не установлен).
10. 📝 Чек-лист: всё готово к работе
- [ ] Система обновлена (
sudo apt update && sudo apt upgrade -y) - [ ] Выбран и выполнен один из способов установки (APT / tarball / source)
- [ ]
go versionпоказывает ожидаемую версию - [ ] Для tarball и source: Go добавлен в PATH (
command -v goпоказывает правильный путь) - [ ] Тестовый модуль создаётся (
go mod init helloв пустой директории) - [ ] Тестовая программа запускается (
go run hello.goвыводитHello, World from Go!)
Заключение
Вы установили Go на Debian. Если вы выбрали APT — получили стабильную, но, скорее всего, старую версию. Если выбрали официальный tarball — получили самую свежую версию, готовую для разработки. Если собрали из исходников — получили максимальный контроль, но за это пришлось заплатить временем компиляции.
Теперь вы можете разрабатывать на Go, компилировать Go-проекты и использовать современные инструменты, написанные на этом языке.
Что дальше:
- Изучите официальную документацию Go, особенно раздел «How to Write Go Code»
- Настройте редактор (VS Code, GoLand, Vim) с поддержкой gopls
- Установите дополнительные инструменты:
go install golang.org/x/tools/gopls@latest - Изучите управление зависимостями через
go mod - Если вы работаете с Go-проектами, установите
git(sudo apt install git -y)