Какими должны быть значения 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
25 ответов
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
должен быть установлен только при установке в другое место.
(обновленная версия ответа Криса Банча.)
Вот моя простая установка:
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").
Первый забег go env
,
Если вы видите, что переходы не установлены, вы можете установить их с помощью homebrew или через пакет и / или другими способами.
Если вы видите вывод, значит, ваш go установлен.
Он показывает вам все envs, которые установлены и не установлены.
Если вы видите пустой для GOROOT
:
- бежать
which go
(На моем компьютере:/usr/local/go/bin/go
) - затем экспортировать, как это
export GOROOT=/usr/local/go
Если вы видите пустой для GOPATH
:
- Создайте любую директорию в любом месте на вашем компьютере для проектов go в моем случае:
~/GO_PROJECTS
- затем
export GOPATH=~/GO_PROJECTS
GOPATH
обсуждается здесь:
GOPATH
Переменная среды
GOPATH
может быть установлен как разделенный двоеточиями список путей, внутри которых можно найти код Go, объекты пакета и исполняемые файлы.Установить
GOPATH
использовать goinstall для сборки и установки вашего собственного кода и внешних библиотек вне дерева Go (и во избежание написания Make-файлов).
А также GOROOT
обсуждается здесь:
$GOROOT
Корень дерева Го, часто$HOME/go
, По умолчанию это родительский каталог каталога, в которомall.bash
это запустить. Если вы решили не устанавливать$GOROOT
Вы должны запустить gomake вместо make или gmake при разработке программ Go с использованием обычных make-файлов.
Я прочитал go help gopath
Документы и был все еще невероятно смущен, но нашел этот маленький самородок с другой страницы Go Doc:
Переменная среды GOPATH указывает местоположение вашей рабочей области. Вероятно, это единственная переменная среды, которую вам нужно установить при разработке кода Go.
Начиная с версии 1.8 (2 квартал 2017 г.), для GOPATH по умолчанию будет установлено значение $HOME/go.
Смотрите выпуск 17262 и комментарий Роба Пайка:
$HOME/go
это будет.
Единственного лучшего ответа не существует, но он короткий и приятный, и выбрать его может только проблема, если$HOME/go
уже существует, что будет рад только для экспертов, которые уже установили и поймутGOPATH
,
Обычно вам не следует устанавливать явно. Команда определяет соответствующий
GOROOT
автоматически в зависимости от расположения в собственном каталоге.
по умолчанию
$HOME/go
. Вам нужно только установить его явно, если вы хотите поместить его в другое место.
содержит:
- Бинарные файлы, установленные с использованием, находятся по адресу
$GOPATH/bin
.¹- Это местоположение можно изменить с помощью переменной среды.
- Кэш загруженного модуля исходного кода и контрольные суммы , расположенный в
$GOPATH/pkg/mod
.- Это местоположение можно изменить с помощью переменной среды.
Если вы установите оба
GOBIN
а также
GOMODCACHE
, и не задавать, то само по себе не должно иметь никакого эффекта.
Кроме того, в устаревшем режиме (когда
GO111MODULE=off
также установлен), содержит:
- Исходный код, используемый для сборки пакетов, хранится в дереве каталогов с корнем
$GOPATH/src
. - Небинарные файлы, установленные с помощью, расположены по адресу
$GOPATH/pkg
.- Установка небинарных пакетов больше не особенно полезна:
go
команда имеет кеш встроенных артефактов , который требуется с Go 1.12 даже в режиме. - Кэш сборки не находится внутри
GOPATH
. Его местоположение можно установить с помощьюGOCACHE
переменная окружения.
- Установка небинарных пакетов больше не особенно полезна:
¹ Двоичные файлы также можно установить с помощью
go get
на Go 1.17 и ранее, но
go install
является предпочтительным с Go 1.16; см. https://golang.org/doc/go1.16.
GOPATH должен указывать не на установку Go, а скорее на ваше рабочее пространство (см. https://golang.org/doc/code.html). Всякий раз, когда вы устанавливаете какой-либо пакет с помощью go get или go install, он попадает в GOPATH. Вот почему он предупреждает вас, что вы совершенно определенно не хотите, чтобы случайные пакеты из Интернета были сброшены в вашу официальную установку.
Относительно 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()
функция, которая продолжит сообщать исходное место установки; это может быть исправлено в более поздних выпусках.
Конфигурации GOPATH и GOROOT амортизируются.
Вместо этого вы можете использовать модуль GO.
Например:
mkdir go_appcd go_appgo mod init go_app
В современном Go вам не нужно устанавливать
GOPATH
или же
GOROOT
. Фактически, если вы не занимаетесь чем-то очень специализированным, лучше всего отключить их в вашей системе.
Используйте модули Go . Установив Go , выберите каталог, в котором вы хотите работать. Потом:
$ mkdir example
$ cd example
$ go mod init example.com
Обратите внимание, что имя модуля
example.com
произвольно; если вы продолжите работу на GitHub, это может быть что-то вроде
github.com/your-username/project-name
.
Последняя команда создаст файл; теперь вы можете получать зависимости с помощью
go get
:
$ go get rsc.io/quote
Теперь ваш код использует эту зависимость:
$ touch main.go
Поместите это в
main.go
:
package main
import (
"fmt"
"rsc.io/quote"
)
func main() {
fmt.Println(quote.Go())
}
И запустить с:
$ go run .
По исходному вопросу теперь вы можете получить свою зависимость с помощью:
$ go get github.com/ha/doozer
Теперь вы можете использовать
doozer
модуль в вашем коде. И так далее. Вы также можете изучить файл в своем каталоге, чтобы увидеть перечисленные зависимости вместе с их версиями. Каждый модуль самодостаточен, со своими версиями зависимостей. Вы можете разместить два модуля рядом друг с другом, каждый со своим
go.mod
файл, указывающий на разные версии какой-либо зависимости - все это будет работать нормально из-за изоляции между модулями.
Для получения дополнительной информации начните с официального руководства здесь . В нескольких главах он проведет вас через шаги, показанные выше, а также напишет ваши собственные повторно используемые модули и пакеты и импортирует их из других модулей. Дополнительные интерактивные руководства доступны по адресу https://play-with-go.dev/.
Как уже упоминалось выше:
Переменная среды GOPATH указывает местоположение вашей рабочей области.
Для Windows это работало для меня (в окне Ms-dos):
set GOPATH=D:\my_folder_for_go_code\
Это создает переменную GOPATH, которую Ms-dos распознает при использовании следующим образом:
cd %GOPATH%
Множество ответов, но без содержания, например, роботы, которые копируют и вставляют то, что есть в их системе. Нет необходимости устанавливать в качестве переменной среды. Однако существует полезная необходимость установить переменную среды, и если она не установлена, по умолчанию используется
${HOME}/go/
папка.
Это
PATH
переменная окружения, на которую вы должны обратить внимание, потому что эта переменная может изменить ваш. Нет ! Забывать .
Теперь, если вы переключитесь или перейдете на новый, ваши загруженные пакеты будут использовать по умолчанию
$HOME/go
папка, и она перепутается с тем, что было у вас раньше. Это не хорошо.
Следовательно, именно здесь вам нужно определить, чтобы изолировать загруженные пакеты нового
go version
.
Таким образом, забудьте
GOROOT
. Думать больше о
GOPATH
.
Запустить
go help environment
у него есть документация для каждой переменной среды, которая может быть указана
go env
команда
Вот одно решение (для одного пользователя):
GOROOT=$HOME/.local # your go executable is in $GOROOT/bin
GOPATH=$HOME/.gopath
PATH=$GOROOT/bin:$GOPATH/bin:$PATH
go
жалуется, если вы измените .gopath
к .go
.
Я бы хотел, чтобы они пошли с тем, как rust/cargo
ребята сделали и просто собрали все в одном месте.
Начиная с 2020 и Go версии 1.13+, в Windows лучший способ обновить GOPATH - это просто ввести в командной строке:
setx GOPATH C:\mynewgopath
Вам не нужно явно указывать 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 (и во избежание написания файлов Makefile).
После установки 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
Также есть случай, когда мы используем go, он компилирует все файлы go.
Допустим, у нас был один файл main.go, а затем мы изменили текущий файл на main_old.go, а затем добавили наш новый файл main.go. Затем, когда мы создадим наше приложение, все файлы go будут скомпилированы. Таким образом, эта ошибка может быть связана с ошибкой компиляции в некоторых других файлах go.
Для всех новичков они могли просто
export GOPATH=$HOME/go
если вы используете Ubuntu или делаете
go help gopath
за дополнительной информацией.
Я должен был добавить
export GOROOT=/usr/local/Cellar/go/1.10.1/libexec
в мой ~/.bash_profile на Mac OS X
В OSX я установил с Brew, вот настройка, которая работает для меня
GOPATH="$HOME/my_go_work_space" //make sure you have this folder created
GOROOT="/usr/local/Cellar/go/1.10/libexec"
Если вы используете дистрибутив, вы должны указать, где находятся включаемые файлы, например:
$ rpm -ql golang | grep include
/usr/lib/golang/include
(Это для Fedora 20)
Значения должны быть (MACOS):
GOROOT="/usr/local/go" --> all binaries file core go
GOPATH="/Applications/proyectos/go" --> the route to workspace (custom workspace)