Avatar ·

Как правильно установить GOPATH в Ubuntu и какой файл нужно редактировать?

Всем привет! Я только начал изучать Go на Ubuntu 22.04. Установил Go через apt, но при попытке запустить простую программу с импортом стороннего пакета (например, `github.com/gorilla/mux`) получаю ошибку: ``` go: cannot find main module; see 'go help modules' ``` Я прочитал, что нужно настроить переменную окружения GOPATH. На Windows это делается через системные переменные, а на Ubuntu я запутался. Пробовал выполнить `export GOPATH=$HOME/go` в терминале — работает, но после закрытия терминала всё сбрасывается. Как сделать настройку постоянной? Какой файл нужно редактировать: `.bashrc`, `.profile`, `.zshrc` или что-то другое? Я использую стандартный терминал Ubuntu (bash). Также непонятно: нужно ли создавать какие-то папки внутри `$HOME/go`? И обязательно ли указывать GOPATH, если я использую Go Modules (у меня Go 1.21)? Везде пишут по-разному. Помогите разобраться с минимальной рабочей конфигурацией для новичка. Пример моего кода (файл main.go в папке ~/myproject): ```go package main import "fmt" func main() { fmt.Println("Hello, Go!") } ``` При попытке установить пакет через `go get github.com/gorilla/mux` получаю ошибку про GOPATH. <<>>

Постоянная настройка GOPATH в Ubuntu

Привет! Твоя проблема типична для новичков. Давай разберёмся по порядку. Начнём с главного: в современных версиях Go (1.16+) GOPATH больше не обязателен, если ты используешь Go Modules. Но если ты хочешь работать в "традиционном" стиле (без модулей) или просто иметь резервную настройку, вот правильное решение.

Какой файл редактировать?

Для bash (твой стандартный терминал) редактируй ~/.bashrc. Если используешь Zsh — ~/.zshrc. Файл ~/.profile тоже подойдёт, но .bashrc загружается при каждом запуске интерактивного терминала, что удобнее.

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

  1. Открой файл в редакторе:
    nano ~/.bashrc
  2. Добавь в конец файла строки:
    export GOPATH=$HOME/go
    export PATH=$PATH:$GOPATH/bin
  3. Сохрани и выйди: Ctrl+O, Enter, Ctrl+X.
  4. Примени изменения:
    source ~/.bashrc
  5. Проверь:
    echo $GOPATH
    # Должно вывести: /home/твой_пользователь/go

Создание структуры папок

Да, в $GOPATH должны быть подпапки:

mkdir -p $GOPATH/{src,pkg,bin}
  • src — для исходного кода твоих проектов
  • pkg — для скомпилированных пакетов
  • bin — для скомпилированных бинарников

Но есть нюанс: Go Modules

Начиная с Go 1.16, рекомендуется использовать Go Modules. Это избавляет от ручного управления GOPATH. Для твоего проекта сделай так:

  1. Создай папку проекта где угодно (не обязательно внутри GOPATH):
  2. mkdir ~/myproject && cd ~/myproject
  3. Инициализируй модуль:
  4. go mod init myproject
  5. Теперь устанавливай пакеты через go get:
  6. go get github.com/gorilla/mux
  7. Запускай программу:
  8. 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:

  1. Открой файл:
    nano ~/.profile
  2. Добавь в конец:
    export GOPATH=$HOME/go
    export PATH=$PATH:$GOPATH/bin
  3. Сохрани и выполни:
    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 оставь для глобальных системных переменных, которые должны быть доступны всем процессам.