не може завантажити, $ GOPATH не встановлено


150

Я хочу встановити json2csv за допомогою, go get github.com/jehiah/json2csvале я отримую цю помилку:

package github.com/jehiah/json2csv: cannot download, $GOPATH not set. For more details see: go help go path

Будь-яка допомога, як виправити це на MacOS?



1
Дивіться також: stackoverflow.com/questions/17872223 / ...
Shog9

3
У мене однакова проблема з іншим пакетом (цуценя). C'mon Go, технічне обслуговування, будь ласка, зробіть інсталятор (OS X), який завершує роботу! Інсталятор OS X для Node - прекрасний приклад. Використання Node не потребує додаткових кроків встановлення вручну. Це просто працює. Сподіваюся, майбутні версії інсталятора Go стануть кращими.
jwfearn

Відповіді:


140

[Оновлення: станом на Go 1.8, GOPATHза замовчуванням $HOME/go, але ви все ще можете вважати це корисним, якщо ви хочете зрозуміти GOPATHмакет, налаштувати його тощо]

Офіційний сайт Go обговорює GOPATH та способи складання каталогу робочої області .

export GOPATH="$HOME/your-workspace-dir/"- запустіть його у своїй оболонці, а потім додайте її до ~/.bashrcеквівалента, щоб вона була встановлена ​​для вас у майбутньому. Go встановить пакети в src/, bin/і pkg/, підкаталогів. Ви хочете покласти десь під власні пакети $GOPATH/src, як, наприклад, $GOPATH/src/github.com/myusername/якщо ви хочете опублікувати в GitHub. Ви також, ймовірно, захочете export PATH=$PATH:$GOPATH/binу своєму.bashrc щоб ви могли запускати компільовані програми під $GOPATH.

Необов’язково, через Rob Pike , ви також можете встановити, CDPATHщоб швидше cdупакувати dirs в баш: export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/xозначає, що ви можете просто ввестиcd net/html замість cd $GOPATH/src/golang.org/x/net/html.

Кіт Rarick зазначає ви можете встановити , GOPATH=$HOMEщоб покласти ие src/, pkg/і bin/каталоги прямо під домашнім каталогом. Це може бути приємно (наприклад, у вас вже є $HOME/binшлях), але, звичайно, деякі люди використовують декілька робочих просторів тощо.


Дякуємо за інформацію. Чи потрібно змінювати робочу область для кожного окремого проекту?
Doug Molineux

1
Загалом, ні, ви можете використовувати одне робоче поле, яке src/містить, наприклад, github.com/youruser/xта github.com/youruser/y. Це я і роблю. У людей можуть бути свої причини робити інакше (політика компанії, щоб відмовлятися від проектів?), Але я не можу з цим говорити.
twotwotwo

3
$ GOPATH встановлено, але "не можна завантажити, $ GOPATH не встановлено. Детальніше див.: Go help gopath" все одно з'являється.
Tyguy7

Яка платформа (Windows або Linux / OS X / інші Unix)? Якщо не Windows, що echo $GOPATHговорити? Можливо, варто опублікувати як окреме запитання; це здається, що ви потрапили в якусь незвичну ситуацію, і налагодження тих, хто в коментарях, може бути складним.
twotwotwo

2
@ Tyguy7 швидше за все, ти цього не зробив export; запустіть, /bin/bash -c "echo \$GOPATH"щоб переконатися, що підпроцеси можуть бачити $GOPATH; якщо це відлуння порожнє, то біжіть export GOPATHі тодіgo get ...
sanmai


33

Використання заварки

Я встановив його за допомогою brew.

$ brew install go

Коли це було зроблено, якщо ви запустили цю команду brew, вона покаже таку інформацію:

$ brew info go
go: stable 1.4.2 (bottled), HEAD
Go programming environment
https://golang.org
/usr/local/Cellar/go/1.4.2 (4676 files, 158M) *
  Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/go.rb
==> Options
--with-cc-all
    Build with cross-compilers and runtime support for all supported platforms
--with-cc-common
    Build with cross-compilers and runtime support for darwin, linux and windows
--without-cgo
    Build without cgo
--without-godoc
    godoc will not be installed for you
--without-vet
    vet will not be installed for you
--HEAD
    Install HEAD version
==> Caveats
As of go 1.2, a valid GOPATH is required to use the `go get` command:
  https://golang.org/doc/code.html#GOPATH

You may wish to add the GOROOT-based install location to your PATH:
  export PATH=$PATH:/usr/local/opt/go/libexec/bin

Важливі фрагменти цих рядків:

/usr/local/Cellar/go/1.4.2 (4676 файлів, 158М) *

експортувати PATH = $ PATH: / usr / local / opt / go / libexec / bin

Створення середовища GO

Це показує, де встановлено GO. Нам потрібно зробити наступне, щоб налаштувати середовище GO:

$ export PATH=$PATH:/usr/local/opt/go/libexec/bin
$ export GOPATH=/usr/local/opt/go/bin

Потім ви можете перевірити за допомогою GO, щоб побачити, чи правильно налаштовано:

$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/usr/local/opt/go/bin"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.4.2/libexec"
GOTOOLDIR="/usr/local/Cellar/go/1.4.2/libexec/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"

Налаштування json2csv

Виглядає добре, тому давайте встановлюємо json2csv:

$ go get github.com/jehiah/json2csv
$

Що щойно сталося? Він встановив його. Ви можете перевірити так:

$ $ ls -l $GOPATH/bin
total 5248
-rwxr-xr-x  1 sammingolelli  staff  2686320 Jun  9 12:28 json2csv

Гаразд, то чому я не можу ввести json2csvсвою оболонку? Це тому, що /binкаталог у $GOPATHсписку не на вашому $PATH.

$ type -f json2csv
-bash: type: json2csv: not found

Тож давайте тимчасово додати його:

$ export PATH=$GOPATH/bin:$PATH

І перевірте:

$ type -f json2csv
json2csv is hashed (/usr/local/opt/go/bin/bin/json2csv)

Тепер він є:

$ json2csv --help
Usage of json2csv:
  -d=",": delimiter used for output values
  -i="": /path/to/input.json (optional; default is stdin)
  -k=[]: fields to output
  -o="": /path/to/output.json (optional; default is stdout)
  -p=false: prints header to output
  -v=false: verbose output (to stderr)
  -version=false: print version string

Додайте зміни , які ми зробили , щоб $PATHі $GOPATHдо вашого , $HOME/.bash_profileщоб зробити їх зберігатися між перезавантаженнями.


18

Перегляд відео

Загалом, я завжди рекомендую це офіційне відео від Go, щоб отримати короткий огляд цього питання:

http://www.youtube.com/watch?v=XCsL89YtqCs

Це простіше показати, ніж сказати.

@jwfearn перефразовував важливу частину відео:

export GOPATH="${HOME}/gocode"; export PATH="${PATH}:${GOPATH}/bin"; mkdir -p "${GOPATH}"


2
Відмінне вступне відео - я завжди краще розумію, коли воно мені показано.
Джошуа Пінтер

3
Спасибо @jwfearn - відеозаписи призначені для музики та інших розваг; не вдається скопіювати та вставити з них :-)
kguest


3

Для MAC це спрацювало добре для мене.

sudo nano /etc/bashrc

і додайте нижче в кінці файлу

export PATH=$PATH:/usr/local/opt/go/libexec/bin
export GOPATH=/usr/local/opt/go/bin

Це має вирішити проблему. Спробуйте відкрити новий термінал і відлунюйте $ GOPATH, ви повинні побачити правильне значення.


2

(для MAC)

Я спробував усі ці відповіді, і з незрозумілої причини жодна з них не спрацювала.

Мені довелося «примушувати подачу» GOPATH, встановлюючи змінну оточення для кожної команди, яка цього вимагала. Наприклад:

sudo env GOPATH=$HOME/goWorkDirectory go build ...

Навіть glideдавав мені GOPATH not setпомилку. Вирішив це, знову ж таки, «силовим годуванням»: я спробував усі ці відповіді, і з незрозумілої причини жодна з них не спрацювала.

Мені довелося «примушувати подачу» GOPATH, встановлюючи змінну оточення для кожної команди, яка цього вимагала.

sudo env GOPATH=$HOME/goWorkDirectory glide install

Сподіваюся, що це комусь допоможе.


2

Ви $GOROOTне повинні бути встановлені. Вам $GOPATHслід налаштувати $HOME/goнабравши текстexport $GOPATH=$HOME/go

Введіть, export GOROOT=""щоб виправити свою проблему.


1

Просто роби export GOPATH="/whatever/you/like/your/GOPATH/to/be".


4
Якщо я нобі, я ще не знаю, "де я хотів би бути моїм GOPATH". ІМХО це опір , що не існує по замовчуванням поведінку GOPATH , який може бути перевизначений змінної оточення.
jwfearn

0

Якщо ви зіткнулися з цією проблемою після $GOPATHналаштування, це може бути тому, що ви працюєте з непідтримуваною оболонкою. Я використовував, fishі це не спрацювало, запустивши його з bashдобре працювали.


0

Ви можете використовувати рішення "експорту" так само, як пропонували інші хлопці. Я хотів би надати вам інше рішення для постійної зручності: ви можете використовувати будь-який шлях як 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


0

Запустіть "ідіть env" і подивіться, куди зараз вказує ваш GOPATH. Якщо ви перейдете на цей каталог, ваша команда 'go get..etc' повинна працювати.


0

Ця проблема сталася зі мною в малиновому пі. Я ввійшов через клієнта VNC Проблема не зважала на налаштування та експорт GOPATH. Потім запустив команду "go get" без судо, і вона спрацювала чудово.


-1

Мені довелося запустити додаток як root (щоб відкрити веб-сервер на порту 80), це створило для мене помилку, оскільки користувач sudo має інше середовище, ніж звичайний користувач, отже GOPATH не був встановлений.

Якщо у когось іншого є ця проблема, додайте -Eдо команди, це збереже середовище користувача.

sudo -E go run main.go

Більше інформації див. Тут: Google Групи - проблема GOPATH


Не впевнений, чому це було знято, але виправили це для мене…
Pwdr
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.