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

324

Я пытаюсь установить 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
jshen
источник
3
@ Следующие ссылки больше не действительны
Йоррит Ридейк
Файл устарел для проекта. Связанная проблема, связанная с OSX, найдена здесь: github.com/go-lang-plugin-org/go-lang-idea-plugin/issues/841
Motin
Примечание: по умолчанию GOPATHбудет установлено для вас в Go 1.8 (2017). Смотрите мой ответ ниже
VonC
Да, я тоже нашел это запутанным, способ организации крестовины. Это помогло: albertech.blogspot.com/2017/01/…
jar
1
@BenyaminJafari, потому что goinstallэто действительно древний до Go1 и не существует с 2012 года.
Дейв C

Ответы:

312

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

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

PJE
источник
44
Более подробная информация о GOPATH находится в разделе Как написать код Go. Для понимания команды требуется понимание информации go, которая необходима для работы с Go. Например, использование goinstallв ОП теперь должно быть go get.
Соня
13
Также обратите внимание на фактический путь установки Go. Например, при настройке homebrew по умолчанию, homebrew установит go in /usr/local/Cellar/go/. В этом случае путь экспорта должен быть установлен с помощью export GOROOT=/usr/local/Cellar/go/{version}и export PATH=$PATH:$GOROOT/bin.
ekillaby
10
Я должен был сделать, export GOROOT=/usr/local/Cellar/go/1.2/libexec/чтобы мой работал с варевом.
Стивен Сорока
Я не могу предложить это редактирование, потому что приложение жалуется, что мое редактирование «содержит» неформатированный код (чего не происходит; большое спасибо ТАК), но:
Подстановочный
Начиная с Go 1.10, если GOROOT не установлен, инструмент go попытается определить его по своему местоположению. Я также не могу вставить ссылку, потому что она не работает в iOS-приложении Stack Exchange. Очень расстроен прямо сейчас.
Wildcard
97

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

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»).

EvgenijM86
источник
Я думаю, что этот ответ легче понять, поскольку есть сопоставление со структурой папок.
h-rai
Включает ли GOPATH целые деревья проекта (например, git) с не-go файлами - например, изображения, сценарии, файлы сборки и т. Д.?
Сергей
52

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

Если вы видите пустой для 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
РАВИ
источник
2
which goсделал это для меня. Он использовал другое место установки go из предыдущей установки с использованием Chocolatey. Удалил эту папку и удалил ее из переменной PATH. Теперь это работает. Спасибо!
sgarg
which goкоманда не работает для меня в Windows 7. Как я могу найти, где я должен выполнить эту команду
firstpostcommenter
Соответствующая команда windows where goпокажет вам путь к исполняемому файлу
Falco
export GOPATH=~/GO_PROJECTSсделал работу
Thamaraiselvam
39

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

GOPATHПеременной среде

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

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

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

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

Крис Банч
источник
поэтому, если я установил go в ~ / projects / go, какими должны быть значения переменной, чтобы найти os, fmt и т. д.?
jshen
2
Так где же Go установлен, когда вы sudo apt-get install golang?
weberc2
9
@ weberc2 если вы запустите, go envвы должны увидеть эту информацию, для меня это было/usr/lib/go/
Андре
19

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

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

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

Максимум
источник
10

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

arganzheng
источник
9

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

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

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

VonC
источник
Как такая простая тема может стать такой сложной! Спасибо за лучший ответ здесь.
dodgy_coder
@dodgy_coder На самом деле ... посмотрите на первые две строки моего другого ответа: stackoverflow.com/a/37905102/6309 ;) Это может в конечном итоге стать еще проще: больше нет GOPATH! Более подробная информация в stackoverflow.com/a/48914523/6309 .
VonC
да, я согласен, GOPATH на самом деле не требуется, если вы идете по умолчанию, это правильно? Мне все равно нужно было установить его, так как он необходим для среды разработки Google App Engine (Go Standard). Они на самом деле говорят вам, чтобы установить GOPATH, но не говорят вам, какое значение, чтобы установить его ...!
dodgy_coder
@dodgy_coder Да, по умолчанию Go будет искать PATH проекта с фиксированным заданным значением.
VonC
6

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

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

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

set GOPATH=D:\my_folder_for_go_code\

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

cd %GOPATH%
Тимоти Генри
источник
3

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

VonC
источник
0

Начиная с версии 2020 и Go версии 1.13+, в Windows лучший способ обновления GOPATH - просто ввести в командной строке:

setx GOPATH C:\mynewgopath
Farshid
источник
0

Вот одно решение (для одного пользователя):

GOROOT=$HOME/.local # your go executable is in $GOROOT/bin
GOPATH=$HOME/.gopath
PATH=$GOROOT/bin:$GOPATH/bin:$PATH

goжалуется, если вы измените .gopathна .go.

Хотелось бы, чтобы они пошли с тем, как rust/cargoребята, и просто собрали все в одном месте.

осколки
источник
-1

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

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

GOROOT="/usr/local/Cellar/go/1.10/libexec"
Эдвин Икечукву Оконкво
источник
-1

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

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

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

Шамми Шайлай
источник
-1

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

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

Джино Джосси
источник
-1

После установки 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
Амит Канерия
источник
-1

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

Кроме того, при попытке работать с ошибкой vgo:

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

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

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

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

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

Эффи Бар-Шеан
источник
-2

значения должны быть (MACOS):

GOROOT="/usr/local/go" --> all binaries file core go
GOPATH="/Applications/proyectos/go" --> the route to workspace (custom workspace)
Диего Санта Круз Мендесу
источник
-3

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

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

(Это для Fedora 20)

Брено Лейтау
источник