Как мне установить переменную среды 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 и как его следует использовать в целом
Луи Мэддокс,



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


12
Не забудьте $ source ~/.bashrc;)
Eversor

65

Убунту 14.04

export GOPATH=$HOME/go

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

$HOME/.bashrc

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

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

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

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


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

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переменную на ваш выбор.


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

Я где-то читал, что установка 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 .. это еще одно приключение .. :)


Не делай этого. Вы не хотите компилировать вещи как 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

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"

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

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

Переменная среды 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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.