Какими должны быть значения 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

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

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


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


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


9

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

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

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


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


0

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

setx GOPATH C:\mynewgopath

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

Также есть случай, когда мы используем 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-файлов).



-3

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

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

(Это для Fedora 20)

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