невозможно загрузить, $ 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.

По желанию, через Роба Пайка вы также можете установить, CDPATHчтобы быстрее cdупаковывать каталоги в bash: это 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на своем пути), но, конечно, некоторые люди используют несколько рабочих пространств и т. Д.


Спасибо за информацию. Вам нужно изменить рабочее пространство для каждого отдельного проекта?
Дуг Молинью

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 файлов, 158M) *

экспорт 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 по умолчанию, которое может быть переопределено переменной окружения.
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/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


0

Запустите 'go env' и посмотрите, куда в данный момент указывает ваша GOPATH. Если вы перейдете в этот каталог, ваша команда 'go get..etc' должна работать.


0

Эта проблема возникла у меня в Raspberry Pi. Я вошел в систему через клиент VNC. Проблема сохраняется, несмотря на установку и экспорт GOPATH. Затем запустил команду "go get" без sudo, и она сработала отлично.


-1

Мне пришлось запустить приложение от имени пользователя root (чтобы открыть веб-сервер на порту 80), это вызвало у меня ошибку, потому что пользователь sudo имеет среду, отличную от обычного пользователя, поэтому GOPATH не был установлен.

Если у кого-то еще возникла эта проблема, добавьте -Eв команду, это сохранит пользовательскую среду.

sudo -E go run main.go

Для получения дополнительной информации см. Обсуждение здесь: Google Groups - GOPATH Problem


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