Невозможно загрузить, $GOPATH не установлен

Я хочу установить 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

[Обновить: по состоянию на 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 в bash: export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/x означает, что вы можете просто ввести cd net/html вместо cd $GOPATH/src/golang.org/x/net/html.

Keith Rarick примечания вы можете установить GOPATH=$HOME, чтобы поставить каталоги Go src/, pkg/ и bin/ прямо под ваш homedir, Это может быть хорошо (например, у вас уже может быть $HOME/bin на вашем пути), но, конечно, некоторые люди используют несколько рабочих областей и т.д.

Ответ 3

Использование brew

Я установил его с помощью 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) *

export 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, чтобы они сохранялись между перезагрузками.

Ответ 4

Смотреть видео

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

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

Проще показаться, чем быть сказанным.

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

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

Ответ 5

Просто сделайте export GOPATH="/whatever/you/like/your/GOPATH/to/be".

Ответ 6

Для MAC это сработало для меня.

sudo nano /etc/bashrc

и добавьте ниже в конце файла

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

Это должно устранить проблему. Попробуйте открыть новый терминал и эхо $GOPATH вы должны увидеть правильное значение.

Ответ 7

Мне было проще сделать это вот так:

export GOROOT=$HOME/go
export GOPATH=$GOROOT/bin
export PATH=$PATH:$GOPATH

Ответ 8

(для MAC)

Я пробовал все эти ответы и, по какой-то еще неизвестной причине, никто из них не работал.

Мне пришлось "принудительно подавать" GOPATH, установив переменную окружения для каждой команды, которая ему нужна. Например:

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

Даже glide давал мне ошибку GOPATH not set. Решено еще раз "силой кормить":   Я пробовал все эти ответы и, по какой-то еще неизвестной причине, никто из них не работал.

Мне пришлось "принудительно подавать" GOPATH, установив переменную окружения для каждой команды, которая ему нужна.

sudo env GOPATH=$HOME/goWorkDirectory glide install

Надеюсь, это поможет кому-то.

Ответ 9

Если вы столкнулись с этой проблемой после настройки $GOPATH, это может быть связано с тем, что вы запускаете ее с неподдерживаемой оболочкой. Я использовал fish, и он не работал, запуск его с помощью bash работал нормально.

Ответ 10

Ваш $GOROOT не должен быть настроен. Вы $GOPATH должны быть установлены на $HOME/go, набрав export $GOPATH=$HOME/go

Введите export GOROOT="", чтобы исправить вашу проблему.

Ответ 11

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

Ответ 12

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

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

sudo -E go run main.go

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