Як встановити змінну середовища 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
Окрім відповідей на те, як його встановити, дивіться цю відповідь ТА, де пояснюється, що таке ГОПАТ, і як його взагалі слід використовувати
Луї Маддокс,



1
Примітка: Go 1.8+ (Q2 2017) встановить GOPATHдля вас: дивіться мою відповідь нижче .
VonC

Відповіді:


284

Новий шлях:

Перевірте цю відповідь.

Старий шлях:

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

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
справжньому


12
Пам'ятайте $ source ~/.bashrc;)
eversor

65

Ubuntu 14.04

export GOPATH=$HOME/go

Крім того, ви можете додати цей файл у файл

$HOME/.bashrc

1
Ваш коментар заплутаний, оскільки йдеться про видалений рядок оригінальної відповіді.
Марсель Беркхард

mkdir -p ~ / go / bin export GOPATH = ~ / йти експорт PATH = $ PATH: $ GOPATH / bin:
Alex Punnen

61

GOPATH має бути встановлений у новоствореному порожньому каталозі. Це "робоча область" go ", де вона завантажує пакети та ін. Я використовую ~ / .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 1.11 вам більше не потрібно використовувати GOPATH. Просто перейдіть до каталогу проектів і зробіть це один раз:

go mod init github.com/youruser/yourrepo
  • За допомогою цього Go створює корінь модуля в цій директорії.
  • Ви можете створити скільки завгодно модулів.
  • Покрокові інструкції також дивіться у цій відповіді .

Старий шлях: ГОПАТ

Якщо ви наполягаєте на роботі з GOPATH, то прислухайтеся до цього:

  • Починаючи з Go 1.8, вам не потрібно встановлювати GOPATH чи GOROOT.
  • GOPATH за замовчуванням знаходиться під вашим користувачем / домашнім каталогом.

З документації :

Якщо 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 зі спеціальною оболонкою і не знає це як дуже малоймовірно :-)
Вітовт Шалтеніс

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 та інших рамок, які потребують такої конфігурації.
ymg

Добре, я бачу. Дякуємо за ваш коментар
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 path може бути кожен, де ви хочете просто створити каталог і встановити глобальну змінну шляху в імені 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, ver. 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, перегляньте сторінку Вікі 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

Це було найприємніше розібратися. З надією заощадити свій час.

АБО go був встановлений як користувач 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 / bin: / usr / local / bin: / usr / local / go / bin

Цей PATH може бути довгим рядком, який він повинен бути. Щоб додати нові елементи, просто розділені двокрапкою:

вихід редактор vi та збереження баш-профілю (: wq означає записувати та вийти)

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

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

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

Ви можете перевірити перехід env:

...$# go env

Так!

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

Тепер ви можете судо і перейти, зможете завантажувати та створювати каталоги всередині go / src, і ви можете перейти до того, що ви намагалися зробити.

приклад

# sudo go get github.com/..

Тепер ви зіткнетесь з іншою проблемою .. у вас, можливо, не буде встановлено git..це інша пригода .. :)


Не робіть цього. Ви не хочете збирати речі як корінь і не хочете go getнічого розміщувати десь поруч GOROOT.
Дейв C

Як проходить один пробіг у звичайного користувача? Дуже дякую. У процесі встановлення речі не виходили, і я спробував використати тестову віртуальну машину для перевірки 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зазвичай погана ідея та надмірність у цій ситуації IMHO
Paweł Prażak

@ PawełPrażak Чому? (Я не знаю сценарію оболонки)
DMaster

1
якщо в оцінці оцінюється помилка, наслідки можуть бути болісними; тут було питання, як експортувати GOPATHтільки
Paweł Prażak

0

Відредагуйте свій текст, ~/.bash_profileщоб додати такий рядок:

$ export GOPATH=$HOME/work

Збережіть і вийдіть із редактора. Потім вкажіть своє~/.bash_profile

$ source ~/.bash_profile

Примітка. Встановіть шлях GOBIN для створення бінарного файлу при запуску установки

$ export GOBIN=$HOME/work/bin


-1

Як написано в офіційних інструкціях :

Змінна середовища GOPATH визначає розташування вашої робочої області. Він за замовчуванням переходить до каталогу з назвою перейти всередину вашого домашнього каталогу, тому $ HOME / переходимо на Unix, $ home / переходимо на План 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/barGOPATH, просто зробіть це, як показано нижче:

$ 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.