Avatar ·

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

Всем привет! Я начинаю изучать Go и совсем запутался с настройкой `GOPATH` на Ubuntu. Проблема: я установил Go через `apt install golang-go`, но когда пытаюсь установить внешние пакеты (например, `go get -u github.com/gorilla/mux`), получаю ошибку: `package github.com/gorilla/mux: cannot download, $GOPATH not set. For more details see: go help gopath`. Я прочитал документацию, но там написано слишком сложно. Пробовал писать `export GOPATH=$HOME/go` в терминале — это работает, но только пока открыт терминал. После его закрытия всё сбрасывается. Я слышал, что нужно редактировать какой-то файл, но не могу понять какой: `.bashrc`, `.profile`, `.bash_profile` или вообще `/etc/environment`? Ещё я видел, что в новых версиях Go (1.16+) `GOPATH` якобы не обязателен, но у меня Go 1.18 и без него пакеты не устанавливаются. Пример моего кода, который не работает: ```go package main import ( "fmt" "github.com/gorilla/mux" ) func main() { r := mux.NewRouter() fmt.Println(r) } ``` При попытке запуска через `go run main.go` вылетает ошибка про отсутствие `GOPATH`. Подскажите, какой файл нужно отредактировать и что именно туда писать? Хочу, чтобы настройка сохранялась навсегда, а не только для текущей сессии. <<>>

Настройка GOPATH в Ubuntu: пошаговое руководство

Вы правы — просто export GOPATH=$HOME/go работает только для текущей сессии. Чтобы настройка сохранялась, нужно добавить эту команду в один из конфигурационных файлов оболочки. Вот правильное решение:

1. Определите, какую оболочку вы используете

Большинство современных версий Ubuntu используют Bash. Проверьте:

echo $SHELL
# Вывод: /bin/bash (или /bin/zsh)

2. Редактируем правильный файл

  • Для Bash: ~/.bashrc (рекомендуется) или ~/.profile
  • Для Zsh: ~/.zshrc
  • Для всех пользователей (осторожно): /etc/environment

3. Добавьте настройки в .bashrc

Откройте файл в редакторе:

nano ~/.bashrc

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

# Go configuration
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

4. Примените изменения

После сохранения файла выполните:

source ~/.bashrc

Или просто откройте новый терминал.

5. Проверьте настройку

echo $GOPATH
# Должно вывести: /home/ваш_пользователь/go

go env GOPATH
# Тот же результат

Почему именно .bashrc?

Файл .bashrc выполняется при каждом открытии интерактивного терминала (не login shell). Это идеально для переменных окружения, связанных с разработкой. .profile выполняется только при входе в систему (login shell), поэтому в некоторых случаях настройки из него могут не подхватиться.

Важное замечание про Go 1.16+

Начиная с Go 1.16, GOPATH по умолчанию равен $HOME/go, если не указан явно. Однако для работы go get и установки пакетов он всё ещё необходим. Кроме того, без GOPATH вы не сможете использовать go install для установки утилит из сторонних пакетов.

Пример рабочей структуры после настройки

mkdir -p $GOPATH/src/github.com/gorilla
cd $GOPATH/src/github.com/gorilla
git clone https://github.com/gorilla/mux.git
cd mux
go install

Теперь ваш код будет работать:

package main

import (
    "fmt"
    "github.com/gorilla/mux"
)

func main() {
    r := mux.NewRouter()
    fmt.Println("Router created:", r)
}

Альтернатива: Go Modules (современный подход)

Вместо настройки GOPATH вы можете использовать Go Modules. Создайте проект вне $GOPATH/src:

mkdir ~/myproject
cd ~/myproject
go mod init myproject
go get github.com/gorilla/mux

Этот подход работает без явной установки GOPATH и рекомендуется для новых проектов.

<<>>

Использование /etc/environment для глобальной настройки

Если вы хотите, чтобы GOPATH был доступен всем пользователям системы (например, на сервере), можно отредактировать файл /etc/environment. Этот подход требует прав суперпользователя.

sudo nano /etc/environment

Добавьте строку:

GOPATH=/home/ваш_пользователь/go

Важно: В этом файле нельзя использовать переменные типа $HOME — только абсолютные пути. Также не используйте команды export — просто указывайте ПЕРЕМЕННАЯ=значение.

После редактирования перезагрузите систему или выполните:

source /etc/environment

Недостатки этого подхода:

  • Требует sudo — неудобно для частых изменений
  • Не добавляет $GOPATH/bin в PATH — это нужно делать отдельно в .bashrc или .profile
  • Переменные из /etc/environment применяются ко всем пользователям, что может вызвать конфликты

Рекомендация: Для личного использования лучше ~/.bashrc. Для серверов с одним пользователем Go — ~/.profile. /etc/environment используйте только если абсолютно необходимо сделать переменную глобальной для всех.