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

258

Я пытаюсь сделать go get:

go get github.com/go-sql-driver/mysql

и это терпит неудачу со следующей ошибкой:

package github.com/go-sql-driver/mysql: cannot download, $GOPATH not set. For more details see: go help gopath

когда я делаю a go env, список значений Go отображается, как показано ниже:

ubuntu@ip-xxx-x-xx-x:~$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/go"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
CGO_ENABLED="1"

ясно, что GOPATH не установлен, как и где я могу установить его?

Я вижу много потоков, в которых упоминается эта ошибка, но ни один из них не дает ответа на мой вопрос, какой файл нужно отредактировать, чтобы указать значение для этого пути?

Дэвид Сентлот
источник
Какую оболочку вы используете?
fuz
3
В дополнение к ответам о том, как его установить, см. Этот SO-ответ , в котором разъясняется, что такое GOPATH и как его следует использовать в целом
Луи Мэддокс,
askubuntu.com/questions/4667/…
Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
Используйте GVM: github.com/moovweb/gvm
Сиро Сантилли 郝海东 '病 六四 事件 法轮功
1
Примечание: Go 1.8+ (2-й квартал 2017 года) установит GOPATHдля вас: см. Мой ответ ниже .
VonC

Ответы:

284

Новый способ:

Проверьте этот ответ.

Старый Путь:

Просто добавьте следующие строки в ~ / .bashrc, и это сохранится. Однако вы можете использовать другие пути, которые вам нравятся, как GOPATH вместо $ HOME / go в моем примере.

export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
Даниэль Лин
источник
14
Путь был /usr/share/goна моем Ubuntu 13.10.
Цусанка
35
НЕ используйте / usr / share / go. GOPATH - это «рабочее пространство» go, куда он загружает пакеты и так далее. Создайте новый каталог и используйте его. Я рекомендую ~ / .go
Брайан Ларсен
16
Как указано в ответе пользователя user2128535, GOROOT должен быть установлен в / usr / lib / go
trungly
9
Не устанавливайте GOROOT! dave.cheney.net/2013/06/14/you-dont-need-to-set-goroot-really
Нейт Финч
12
Не забудьте $ source ~/.bashrc;)
Eversor
65

Убунту 14.04

export GOPATH=$HOME/go

Дополнительно вы можете добавить эту строку в файл

$HOME/.bashrc
pasha.zhukov
источник
1
Ваш комментарий сбивает с толку, поскольку он ссылается на удаленную строку исходного ответа.
Марсель Буркхард
mkdir -p ~ / go / bin export GOPATH = ~ / go export PATH = $ PATH: $ GOPATH / bin:
Алекс Пуннен,
61

GOPATH должен быть установлен во вновь созданный пустой каталог. Это «рабочее пространство», куда он загружает пакеты и так далее. Я использую ~ / .go.

Например:

mkdir ~/.go
echo "GOPATH=$HOME/.go" >> ~/.bashrc
echo "export GOPATH" >> ~/.bashrc
echo "PATH=\$PATH:\$GOPATH/bin # Add GOPATH/bin to PATH for scripting" >> ~/.bashrc
source ~/.bashrc

источник: http://www.larry-price.com/blog/2013/12/15/setting-up-a-go-environment-in-ubuntu-12-dot-04/

Брайан Ларсен
источник
1
Большое спасибо
Дилан Б
35

Новый путь: Go Modules

Начиная с Go 1.11, вам больше не нужно использовать GOPATH. Просто зайдите в каталог вашего проекта и сделайте это один раз:

go mod init github.com/youruser/yourrepo
  • При этом Go создает корень модуля в этом каталоге.
  • Вы можете создать столько модулей, сколько захотите.
  • Для пошаговых инструкций, также смотрите этот ответ .

Старый путь: ГОПАТ

Если вы настаиваете на работе с GOPATH, обратите внимание на это:

  • Начиная с Go 1.8, вам не нужно устанавливать GOPATH или GOROOT.
  • GOPATH по умолчанию находится в вашем каталоге user / home.

Из документации :

Если GOPATH не задан, предполагается, что он равен $ HOME / go в системах Unix и% USERPROFILE% \ go в Windows. Если вы хотите использовать пользовательское местоположение в качестве своего рабочего пространства, вы можете установить переменную среды GOPATH.

Инан Гумус
источник
34

Если, например, это Ubuntu, после установки пакетов:

$sudo apt install golang -y

Просто добавьте следующие строки в ~ / .bashrc (вашего пользователя)

export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
firebitsbr
источник
19
export GOPATH=/path/desired/here

Нет необходимости редактировать какой-либо файл, мы можем просто использовать команду выше для непосредственного редактирования переменных среды Go.

Дэвид Сентлот
источник
11
Это не постоянно, хотя. Если вы хотите, чтобы эта опция осталась - скорее всего, вам нужно - вам придется добавить ее в какой-то файл, который загружается при входе в систему.
Куб
1
Спасибо! Большинство пользователей не думают, что есть люди, начинающие с Linux, и если нет документации, в которой говорится, что вы сказали (потому что все считают это известным фактом), как бы мы узнали / нашли информацию?
PlayHardGoPro
19

Напишите этот код в Терминале.

export GOPATH=path/to/your/gopath/directory

Заметка : это будет сбрасываться при каждом новом окне терминала или перезагрузке системы.

Чтобы быть постоянным, вставьте приведенный ниже код в файл .zshrcили .bashrcфайл в соответствии с вашей оболочкой. Эти файлы в вашем домашнем каталоге . Это будет как ниже.

export PATH=path/to/some/other/place/composer/for/example
export GOPATH=path/to/your/gopath/directory
export PATH=$PATH:$GOPATH/bin
atilkan
источник
11

Вам также понадобится GOPATH позже. Так что добавь это ~/.bashrc.

Витаутас Шалтенис
источник
10
Да, я имел в виду это, но отклонил возможность того, что у парня будет коробка Ubuntu с пользовательской оболочкой, и он не узнает об этом как о крайне маловероятной :-)
Vytautas Shaltenis
9

Если вы настроили что-либо, что требует модификации переменных среды, например, Java, Go и т. Д., Это будет очень знакомо.

Я предполагаю, что у вас есть следующая структура каталогов где-то в качестве пути Go:

\---[folder name]
    +---bin
    +---pkg
    \---src
  • открыть новый терминал
  • тип sudo nano /etc/environment
  • найдите PATH=...и идите до конца и добавьте двоеточие :после последнего пути, затем вставьте полный go pathтекст, например/home/user/gocode

и вы сделали, это должно сделать это постоянным через систему.

YMG
источник
1
Я не понимаю, зачем менять $ PATH, если go работает на Дэвида. Ему нужно установить $ GOPATH (см. Ответ Даниэля Лин). Дэвид может объединить оба подхода (или установить его в / etc / profile или $ HOME / .profile). Кстати, я рекомендую Дэвиду прочитать эти ссылки: golang.org/doc/install и golang.org/doc/code.html#GOPATH
zk82
2
@ zk82 $ GOPATH - это переменная окружения, и я не понимаю, зачем редактировать переменные окружения, чтобы добавить эту переменную в проблему. То же самое касается $ JAVA_HOME и других платформ, которые требуют такой конфигурации.
гм
Да я вижу. Спасибо за ваш комментарий.
zk82
3

Вот что заставило меня работать на Ubuntu 15.10, используя fish shell:

# ~/.config/fish/config.fish

set -g -x PATH /usr/local/bin $PATH
set -g -x GOPATH /usr/share/go

Затем мне пришлось изменить права доступа к goпапке (она была установлена ​​как root)

sudo chown <name>:<name> -R /usr/share/go
Том
источник
3

Путь go может быть любым, где вы хотите, просто создайте каталог и установите переменную глобального пути в имени GOPATH для вашей среды.

mkdir ~/go
export GOPATH=~/go
go get github.com/go-sql-driver/mysql
Jeyem
источник
2

С Go 1.8 (Q2 2017) вам не нужно будет редактировать файлы, если вы примете GOPATHзначение по умолчанию (установлено для вас)

$HOME/go

Вы можете увидеть комментарии к проблеме 17262 и соответствующее голосование в твиттере :

Выбрав значение по умолчанию GOPATH, мы можем упростить нашу документацию, потому что мы можем сказать что-то вроде

$ go get github.com/foo/bar

проверим github.com/foo/barрепо в $HOME/go/src/github.com/foo/bar.

Нам не нужно отвлекать новичков от необходимости устанавливать env var, все, что нам нужно сделать, это поместить небольшую заметку в скобках внизу страницы

$HOME/goпуть по умолчанию к вашей рабочей области go.
Если вы хотите изменить этот путь, установите GOPATHпеременную на ваш выбор.

VonC
источник
2

Моя игровая среда была похожа на вашу.

$go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/go-1.6"
GOTOOLDIR="/usr/lib/go-1.6/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT="1"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"

Я решил это, установив GOPATH в / usr / lib / go . Попробуйте это.

export GOPATH=/usr/lib/go
export PATH=$PATH:$GOPATH/bin
NSP
источник
Я где-то читал, что установка GOPATH так же, как каталог установки - плохая идея. Оо
ankush981
2

GOPATH - это переменная среды для вашего рабочего места. GOROOT - это переменная окружения вашего установочного каталога. Хотя GOROOT и GOPATH автоматически устанавливаются (если не было бы ошибки) во время установки, чтобы указать их вручную, вы можете выполнить следующую процедуру. Кроме того, для получения дополнительной информации вы можете обратиться к вики-странице GO .

Лучше установить GOPATH в каталог внутри вашего домашнего каталога, например, $ HOME / go,% USERPROFILE% \ go (Windows).

  1. Это решение Mac, которое тестируется на MacOS Sierra, вер. 10.12, а также в Gogland-EAP, который JetBrains представил как IDE для программирования на Go.

На вашем терминале типа

vim ~/.profile

в открытом документе на Терминале нажмите i и добавьте следующий путь

GOPATH=/path/to/a/directory/inside/home/directory
GOROOT=/path/to/you/go/library
PATH=$PATH:$GOPATH:$GOROOT:$GOROOT/bin

нажмите ESC и введите : x . Наконец, вы должны перезапустить ( закрыть и открыть ) свой терминал или выйти и снова войти в систему .

  1. Для конфигурации Windows и Linux, пожалуйста, обратитесь к странице wiki Go в Githab на странице Настройка GOPATH-Golang .

ВНИМАНИЕ ! Не устанавливайте GOROOT и GOPATH в один и тот же каталог, иначе вы получите предупреждение.

Эсмаил МИРЗАЕЕ
источник
2
export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin

И вы можете проверить по $ go env

мэй
источник
2

(Ubuntu)

Если вы не установите GOPATH, будет использоваться значение по умолчанию.

Вы должны добавить $ GOPATH / bin в ваш PATH, чтобы выполнить любой двоичный файл, установленный в $ GOPATH / bin, или вам нужно набрать $ GOPATH / bin / the-command. Добавьте это в ваш ~ / .bash_profile

export PATH=$GOPATH/bin:$PATH

Текущая команда GOPATH:

go env GOPATH

Изменение команды GOPATH:

export GOPATH=$HOME/your-desired-path

Шубхам Джайсвал
источник
0

Это была самая раздражающая вещь, чтобы иметь дело с. В надежде сэкономить ваше время.

IF go был установлен от имени пользователя root. Пользователю root вашего системного текстового файла bash_profile ~ / .bash_profile необходимо назначить $ GOROOT в каталог go install, а $ GOPATH - в каталог go / src.

  ...$# sudo su
  ...$# vi ~/.bash_profile

    ***Story continues in vi editor***

    GOROOT=$GOROOT:/usr/local/go
    GOPATH=$GOPATH:/usr/local/go/src
    ...
    [your regular PATH stuff here]
    ...

убедитесь, что путь к двоичному файлу находится в вашем пути на .bash_profile

PATH = $ PATH: $ HOME / бен: / USR / местные / бен: / USR / местные / пойти / бен

Этот PATH может быть длинной строкой, необходимой для добавления новых элементов, разделенных двоеточием:

выйдите из редактора vi и сохраните профиль bash (: wq означает запись и выход)

  [esc] 
  [shift] + [:] 
  :wq

Вы должны выйти из терминала и снова войти в систему, чтобы профиль снова запустился ... или вы можете просто запустить его с помощью экспорта.

...$# export GOPATH=/usr/local/go/src

Вы можете проверить go env:

...$# go env

Ура!

GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/usr/local/go/src"
GORACE=""
GOROOT="/usr/local/go"

Теперь вы можете использовать sudo и go, загружать и создавать каталоги внутри go / src, и вы можете приступить к тому, что вы пытались выполнить.

пример

# sudo go get github.com/..

Теперь вы столкнетесь с другой проблемой .. у вас может не быть установленного git .. это еще одно приключение .. :)

user3151532
источник
Не делай этого. Вы не хотите компилировать вещи как root и не хотите go getничего размещать рядом GOROOT.
Дэйв С
Как проходит один запуск под обычным пользователем? Спасибо. В процессе установки ничего не получалось, и я использовал тестовую виртуальную машину, чтобы попробовать GO.
user3151532
0

На моей машине Fedora 20 я добавил следующие строки в мой ~ / .bashrc:

export GOROOT=/usr/lib/golang
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
Raptor
источник
3
Не устанавливайтеGOROOT . (Если только вы не в очень малой подгруппе людей, которые используют бинарный дистрибутив Go, но устанавливаете его где-то там, где нестандартно.)
Дэйв C
0

Еще одно решение: экспортировать каждую GO*переменную среды изgo env

.bashrc:

eval $(go env | grep '^GO[A-Z0-9_]*=' | while read setenv; do
  echo "export $setenv; "
done 2> /dev/null)

[[ -n $GOPATH ]] || export GOPATH="$HOME/go/bin"
[[ -n $GOROOT ]] || export GOROOT=/usr/bin/go
export PATH="$PATH:$GOPATH/bin:$GOROOT/bin"
DMaster
источник
1
evalВ этой ситуации обычно плохая идея и излишество ИМХО
Павел Праняк
@ PawełPrażak Почему? (Я не эксперт по сценариям оболочки)
DMaster
1
если есть ошибка в том, что оценивается, последствия могут быть болезненными; здесь речь шла о том , как экспортировать GOPATHтолько
Paweł Pražák
0

Отредактируйте свой, ~/.bash_profileчтобы добавить следующую строку:

$ export GOPATH=$HOME/work

Сохраните и выйдите из вашего редактора. Затем источник вашего~/.bash_profile

$ source ~/.bash_profile

Примечание. Установите путь GOBIN для создания двоичного файла при запуске go install

$ export GOBIN=$HOME/work/bin
шакал
источник
-1

Этот скрипт поможет вам переключать Gopaths. https://github.com/buffonomics/goswitch

Glstunna
источник
2
Не слепо делиться сценарием. Выложить упоминание о его сценарии использования и сценарии.
Аман Гарг
-1

Как написано в официальной инструкции :

Переменная среды GOPATH указывает местоположение вашего рабочего пространства. По умолчанию это каталог с именем go внутри вашего домашнего каталога, поэтому $ HOME / go в Unix, $ home / go в Plan 9 и% USERPROFILE% \ go (обычно C: \ Users \ YourName \ go) в Windows. Если вы хотите работать в другом месте, вам нужно указать GOPATH путь к этому каталогу. (Другой распространенной настройкой является установка GOPATH = $ HOME.) Обратите внимание, что GOPATH не должен совпадать с путем установки Go.

Так, например, если вы кодируете в Jetbrains Webstorm (используя плагин Go ), вы можете выбрать GOPATHкак /Users/<user>/WebstormProjects.

Проще говоря, установите его там, где вы хотите разместить свои проекты Go.

Абдул Васай
источник
-1

Вы можете использовать «экспортное» решение так же, как и другие ребята. Я хотел бы предложить вам другое решение для постоянного удобства: вы можете использовать любой путь в качестве GOPATH при запуске команд Go.

Во-первых, вам нужно скачать небольшой инструмент с именем gost: https://github.com/byte16/gost/releases . Если вы используете Ubuntu, вы можете скачать версию для Linux ( https://github.com/byte16/gost/releases/download/v0.1.0/gost_linux_amd64.tar.gz ).

Затем вам нужно запустить команды ниже, чтобы распаковать его:

$ cd /path/to/your/download/directory 
$ tar -xvf gost_linux_amd64.tar.gz

Вы получите исполняемый файл gost. Вы можете переместить его /usr/local/binдля удобного использования:

$ sudo mv gost /usr/local/bin

Запустите команду ниже, чтобы добавить путь, который вы хотите использовать в качестве GOPATH, в пространство путей gost . Требуется дать пути имя, которое вы будете использовать позже.

$ gost add foo /home/foobar/bar     # 'foo' is the name and '/home/foobar/bar' is the path

Запустите любую нужную команду Go в формате:

gost goCommand [-p {pathName}] -- [goFlags...] [goArgs...]

Например, вы хотите работать go get github.com/go-sql-driver/mysqlс /home/foobar/barкак GOPATH, просто сделать это , как показано ниже:

$ gost get -p foo -- github.com/go-sql-driver/mysql  # 'foo' is the name you give to the path above.

Это поможет вам установить GOPATH и запустить команду. Но помните , что вы добавили путь в gost«S pathspace . Если вы находитесь под каким-либо уровнем подкаталогов /home/foobar/bar, вы можете даже просто запустить команду ниже, которая будет делать то же самое для краткости:

$ gost get -- github.com/go-sql-driver/mysql

gostэто простой инструмент Go, который может помочь вам управлять GOPATH и выполнять команды Go. Для получения более подробной информации о том, как использовать его для запуска других команд Go, вы можете просто запустить gost help goCmdName. Например, вы хотите узнать больше о install, просто введите слова ниже в:

$ gost help install

Вы также можете найти более подробную информацию в README проекта: https://github.com/byte16/gost/blob/master/README.md

Франко
источник
-1

Вы должны обновить PATH в зависимости от используемого вами терминала (bash или zsh).

  1. Откройте файл сценария оболочки терминала, т. Е. ~/.bashrcИли ~/.zshrcв редакторе
   vi ~/.zshrc
      (or)
   code ~/.zshrc
  1. Обновите GOPATH ниже, если он уже найден, или добавьте строку ниже.

export GOPATH=$HOME/go:/$HOME/projects/go

Здесь вы можете добавить один или несколько путей, разделенных точкой :с запятой из разных мест ваших проектов GO в системе, в GOPATHпеременную среды, т. Е. И т. /path/1:path/2:path/3Д.

В моем случае я добавил 2 пути, как показано выше, один из корня, $HOME/goа другой из каталога проектов.:/$HOME/projects/go

Sudharshan
источник