Как правильно установить GOPATH в Ubuntu и какой файл нужно редактировать?
Постоянная настройка GOPATH в Ubuntu
Привет! Твоя проблема типична для новичков. Давай разберёмся по порядку. Начнём с главного: в современных версиях Go (1.16+) GOPATH больше не обязателен, если ты используешь Go Modules. Но если ты хочешь работать в "традиционном" стиле (без модулей) или просто иметь резервную настройку, вот правильное решение.
Какой файл редактировать?
Для bash (твой стандартный терминал) редактируй ~/.bashrc. Если используешь Zsh — ~/.zshrc. Файл ~/.profile тоже подойдёт, но .bashrc загружается при каждом запуске интерактивного терминала, что удобнее.
Пошаговая инструкция:
- Открой файл в редакторе:
nano ~/.bashrc - Добавь в конец файла строки:
export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin - Сохрани и выйди: Ctrl+O, Enter, Ctrl+X.
- Примени изменения:
source ~/.bashrc - Проверь:
echo $GOPATH # Должно вывести: /home/твой_пользователь/go
Создание структуры папок
Да, в $GOPATH должны быть подпапки:
mkdir -p $GOPATH/{src,pkg,bin}
src— для исходного кода твоих проектовpkg— для скомпилированных пакетовbin— для скомпилированных бинарников
Но есть нюанс: Go Modules
Начиная с Go 1.16, рекомендуется использовать Go Modules. Это избавляет от ручного управления GOPATH. Для твоего проекта сделай так:
- Создай папку проекта где угодно (не обязательно внутри GOPATH):
- Инициализируй модуль:
- Теперь устанавливай пакеты через
go get: - Запускай программу:
mkdir ~/myproject && cd ~/myproject
go mod init myproject
go get github.com/gorilla/mux
go run main.go
В этом случае GOPATH не нужен — Go сам создаст кеш в $GOPATH/pkg/mod. Если ты всё же хочешь задать GOPATH (например, для совместимости со старыми туториалами), следуй первой инструкции.
Проверка версии Go
Убедись, что у тебя Go 1.16+:
go version
# Пример: go version go1.21.0 linux/amd64
Частая ошибка: установка через apt
Версия Go из репозитория Ubuntu часто устаревшая. Рекомендую установить свежую версию вручную:
wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
Теперь твой код из вопроса заработает после go mod init и go run main.go. Удачи!
Альтернативный подход: использование .profile и автоматическая структура
Если ты хочешь, чтобы настройки применялись не только в терминале, но и при входе в систему (например, через SSH или GUI), используй файл ~/.profile. Он загружается один раз при логине, в отличие от .bashrc, который запускается при каждом открытии терминала.
Инструкция для .profile:
- Открой файл:
nano ~/.profile - Добавь в конец:
export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin - Сохрани и выполни:
source ~/.profile
Автоматическое создание структуры GOPATH
Добавь в тот же файл скрипт, который создаёт папки, если их нет:
if [ ! -d "$GOPATH/src" ]; then
mkdir -p $GOPATH/{src,pkg,bin}
echo "Created GOPATH structure"
fi
Когда это полезно?
- Если ты используешь IDE (VS Code, GoLand) — они часто читают
.profile - При автоматической сборке проектов через CI/CD
- Если работаешь через несколько терминалов одновременно
Важно: Если ты используешь Zsh, не забудь проверить, какой файл загружается — .zprofile или .zshrc. В большинстве случаев .zshrc предпочтительнее для настроек терминала.
Мой совет: для повседневной работы используй .bashrc с модулями Go — это самый простой и современный путь. А .profile оставь для глобальных системных переменных, которые должны быть доступны всем процессам.