Какими должны быть значения GOPATH и GOROOT?

Я пытаюсь установить 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

Ответ 1

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

В переменной среды GOPATH перечислены места для поиска кода Go. На Unix, значение представляет собой строку, разделенную двоеточием. В Windows это значение строка с разделителями с запятой. В Plan 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 должен быть установлен только при установке в пользовательское местоположение.

(обновленная версия ответ Криса Бунка.)

Ответ 2

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

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 предназначен для компилятора/инструментов, которые исходят из установки go.
GOPATH предназначен для ваших собственных проектов/сторонних библиотек (загружаемых с помощью "go get" ).

Ответ 3

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

Если вы видите пустой для GOROOT:

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

Если вы видите пустой для GOPATH:

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

Ответ 4

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

GOPATH Переменная среды

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

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

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

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

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

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

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

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

set GOPATH=D:\my_folder_for_go_code\

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

cd %GOPATH%

Ответ 9

В отношении 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() function, который будет продолжать сообщать исходное местоположение установки; это может быть исправлено в последующих выпусках.

Ответ 10

Добавьте три строки ниже в ваш файл ~/.bashrc.

export GOROOT="$HOME/go" # extracted tar.gz go 
export GOPATH="$HOME/go/bin"
export PATH="$GOPATH:$PATH"

Другими словами, $GOROOT/bin - это $GOPATH.

Это GOROOT понять, GOROOT является основным корневым каталогом всего языка go. GOPATH где вы находите go двоичным.

Ответ 11

в OSX, я установил с Brew, вот настройка, которая работает для меня

GOPATH="$HOME/my_go_work_space" //make sure you have this folder created

GOROOT="/usr/local/Cellar/go/1.10/libexec"

Ответ 12

Я должен был добавить

export GOROOT=/usr/local/Cellar/go/1.10.1/libexec

в мой ~/.bash_profile на Mac OS X

Ответ 13

Также есть случай, когда мы используем go, он компилирует все файлы go.

Допустим, у нас был один файл main.go, а позже мы изменили текущий файл на main_old.go, а затем добавили наш новый файл main.go. Затем, когда мы создадим наше приложение, все файлы go будут скомпилированы. Таким образом, ошибка может быть связана с ошибкой компиляции в некоторых других файлах go.

Ответ 14

После установки Go lang, GOROOT является корневым каталогом установки.

Когда я разбил бинарный файл Go Lang в каталоге Windows C: \, мой GOROOT должен быть C:\go. Если установлено с помощью установщика Windows, это может быть C:\Program Files\go (или C:\Program Files (x86)\go, для 64-битных пакетов)

 GOROOT = C:\go

в то время как моя GOPATH - это местоположение исходного кода Go lang или рабочей области.

Если мой исходный код Go lang находится в C:\Users\\GO_Workspace, ваш GOPATH будет выглядеть так:

 GOPATH = C:\Users\<xyz>\GO_Workspace

Ответ 15

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

Также, при попытке работать с vgo:

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

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

ГОПАТ увидеть здесь

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

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

Ответ 16

Если вы используете дистрибутив go, вы должны указать, где находятся файлы include, например:

$ rpm -ql golang | grep include
/usr/lib/golang/include

(Это для Fedora 20)