какими должны быть значения GOPATH и GOROOT? - PullRequest
276 голосов
/ 01 ноября 2011

Я пытаюсь установить doozer следующим образом

$ goinstall github.com/ha/doozer

Я получаю эти ошибки.

goinstall: os: go/build: package could not be found locally
goinstall: fmt: go/build: package could not be found locally
goinstall: io: go/build: package could not be found locally
goinstall: reflect: go/build: package could not be found locally
goinstall: math: go/build: package could not be found locally
goinstall: rand: go/build: package could not be found locally
goinstall: url: go/build: package could not be found locally
goinstall: net: go/build: package could not be found locally
goinstall: sync: go/build: package could not be found locally
goinstall: runtime: go/build: package could not be found locally
goinstall: strings: go/build: package could not be found locally
goinstall: sort: go/build: package could not be found locally
goinstall: strconv: go/build: package could not be found locally
goinstall: bytes: go/build: package could not be found locally
goinstall: log: go/build: package could not be found locally
goinstall: encoding/binary: go/build: package could not be found locally

Ответы [ 15 ]

258 голосов
/ 01 июня 2012

GOPATH обсуждается в документации cmd/go :

Переменная окружения GOPATH содержит список мест для поиска кода Go.В Unix значение представляет собой строку, разделенную двоеточиями.В Windows значение представляет собой строку, разделенную точкой с запятой.На плане 9 это значение представляет собой список.

GOPATH должен быть установлен для получения, сборки и установки пакетов вне стандартного дерева Go.

GOROOT обсуждается в инструкция по установке :

Бинарные дистрибутивы Go предполагают, что они будут установлены в /usr/local/go (или c:\Go под Windows), но есть возможность установить инструменты Goв другое место.В этом случае вы должны установить переменную среды GOROOT так, чтобы она указывала на каталог, в котором она была установлена.

Например, если вы установили Go в свой домашний каталог, вы должны добавить следующие команды в $HOME/.profile:

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

Примечание: GOROOT должен быть установлен только при установке в пользовательское местоположение.

(обновленная версия Chris Bunch'sответить .)

91 голосов
/ 23 декабря 2014

Вот моя простая настройка:

directory for go related things: ~/programming/go
directory for go compiler/tools: ~/programming/go/go-1.4
directory for go software      : ~/programming/go/packages

GOROOT, GOPATH, PATH установлены следующим образом:

export GOROOT=/home/user/programming/go/go-1.4
export GOPATH=/home/user/programming/go/packages
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Итак, вкратце:

GOROOTпредназначен для компилятора / инструментов, которые поставляются с установки.GOPATH предназначен для ваших собственных проектов go / сторонних библиотек (загружается с помощью «go get»).

43 голосов
/ 13 марта 2016

Первый запуск go env.
Если вы видите, что продукты не установлены, вы можете установить их с помощью homebrew или с помощью пакета и / или другими способами.
Если вы видите вывод, значит, вы идетеустановлен.
Показывает все установленные и не заданные env.

Если вы видите пустое значение для GOROOT:

  1. run which go (На моем компьютере: /usr/local/go/bin/go)
  2. , затем экспортируйте так export GOROOT=/usr/local/go

Если вы видите пустое значение для GOPATH:

  1. Создайте любой каталог в любом местеваш компьютер для проектов go в моем случае: ~/GO_PROJECTS
  2. затем export GOPATH=~/GO_PROJECTS
38 голосов
/ 01 ноября 2011

GOPATH обсуждается здесь :

Переменная окружения GOPATH

GOPATH может быть установлена ​​в список, разделенный двоеточиямипути, внутри которых можно найти код Go, объекты пакета и исполняемые файлы.

Установите GOPATH для использования goinstall для создания и установки собственного кода и внешних библиотек вне дерева Go (и во избежание написания Make-файлов).).

И GOROOT обсуждается здесь :

$GOROOT Корень дерева Go, часто $HOME/go.По умолчанию это родительский элемент каталога, в котором выполняется all.bash.Если вы решите не устанавливать $GOROOT, вы должны запускать gomake вместо make или gmake при разработке программ Go с использованием обычных make-файлов.

16 голосов
/ 06 сентября 2013

Я прочитал go help gopath документы и все еще был невероятно смущен, но нашел этот маленький самородок на другой странице go doc:

Переменная среды GOPATH указывает местоположение вашего рабочего пространства. Вероятно, это единственная переменная среды, которую вам нужно установить при разработке кода Go.

http://golang.org/doc/code.html#GOPATH

11 голосов
/ 12 июня 2015

GOPATH должен не указывать на установку Go, а скорее на ваше рабочее пространство (см. https://golang.org/doc/code.html#GOPATH). Всякий раз, когда вы устанавливаете какой-либо пакет с установкой go get или go, он попадает в GOPATH Вот почему он предупреждает вас, что вы, безусловно, не хотите, чтобы случайные пакеты из Интернета были выгружены в вашу официальную установку.

9 голосов
/ 25 октября 2016

Начиная с go 1.8 (Q2 2017), GOPATH будет установлен для вас по умолчанию на $ HOME / go

См. выпуск 17262 и комментарий Роба Пайка:

$HOME/go это будет.
Не существует единственного лучшего ответа, но он короток и приятен, и может быть проблемой выбрать это имя, если $HOME/go уже существует, что будет только приятноэксперты, которые уже установили и поймут GOPATH.

7 голосов
/ 11 августа 2014

Как уже упоминалось выше:

Переменная среды GOPATH указывает местоположение вашего рабочего пространства.

Для Windows это сработало для меня (в окне Ms-dos):

set GOPATH=D:\my_folder_for_go_code\

Создает переменную GOPATH, которую Ms-dos распознает при использовании следующим образом:

cd %GOPATH%
2 голосов
/ 06 августа 2017

Что касается GOROOT, Go 1.9 автоматически установит его путь установки.
Даже если у вас установлено несколько Go, при вызове 1.9.x будет установлено значение GOROOT в /path/to/go/1.9 (раньше, если не задано, предполагался путь по умолчанию, например /usr/local/go или c:\Go).

См. CL Go Review 53370 :

go tool теперь будет использовать путь, из которого он был вызван, чтобы попытаться найти корень дерева установки Go .
Это означает, что если вся установка Go будет перемещена в новое место, go tool должен продолжать работать как обычно.

Это может быть отменено установкой GOROOT в среде, что следует делать только в необычных обстоятельствах.
Обратите внимание, что это не влияет на результат функции runtime.GOROOT() , которая будет продолжать сообщать об исходном месте установки; это может быть исправлено в более поздних выпусках.

0 голосов
/ 10 июля 2019

Вам не нужно явно устанавливать GOROOT (современные версии Go могут выяснить это самостоятельно, основываясь на расположении исполняемого файла go).

Кроме того, получили следующееошибка при попытке работать с vgo:

go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'

Удаление GOROOT, обновление моего GOPATH и export GO111MODULE="on" решили проблему.

GOPATH см. в здесь

Для GOPATH можно задать список путей, разделенных двоеточиями, внутри которых можно найти код Go, объекты пакета и исполняемые файлы.

Установите GOPATH для использования goinstall для сборки и установкиваш собственный код и внешние библиотеки вне дерева Go (и во избежание написания Makefiles).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...