Вам больше не нужно настраивать GOROOT

Go

Почему больше не нужно устанавливатьGOROOTШерстяная ткань? Рекомендуется прочитать две англоязычные статьи, я их перефразировал и объединил в одну.

первый разРечь о том, как настроить до Go 1.10GOROOT, опубликованный в 2013 году.Статья 2начиная с Go 1.10, как справитьсяGOROOT, время 2018, журнал фиксации исходного кода Go. Этот очень короткий.

После прочтения вы обнаружите, что в большинстве случаев нам не нужно вручную устанавливатьGOROOT.

первый раз

Автор: Дэйв Чейни | Адрес:you-dont-need-to-set-goroot-really

Небольшая статья, объясняющая, почему при компиляции и использовании Go не нужно устанавливатьGOROOT.

Сводное представление

В общем, после Go 1.0 для компиляции и использования Go больше не требуется установкаGOROOT. На самом деле, если на вашем компьютере установлено несколько версий локали Go, установитеGOROOTМогут возникнуть некоторые проблемы.

GOPATHЕще надо настроить.

Начиная с Go 1.0,GOPATHЭто настоятельно рекомендуется. С выпуском Go 1.1,GOPATHЭто уже обязательно.

Почему больше не ставитьGOROOT?

Расскажите об истории переменных окружения Go!

Ветераны го могут помнить, что когда-то го был не только в настройкеGOROOT, также необходимо установитьGOOSиGOARCH. Причина настройкиGOROOT, потому что Make вводит при компиляции и сборкеGOROOTСодержание в , должно быть установлено заранееGOROOTкак их базовый путь.

вместе сgo toolВведение , до Go 1.0,GOOSиGOARCHОн стал необязательным, потому что сценарий сборки может автоматически определять системный класс и архитектуру ЦП. После выпуска GO 1.0 были введены инструменты сборки Bootstrap CMD / DINT, были введены,GOOSиGOARCHЭто действительно необязательно и используется только при кросс-компиляции.

Настройка не требуетсяGOOSиGOARCH,ТотGOROOTШерстяная ткань?

GOROOTОпределяется для указания корневого каталога, в котором установлен GO. В предыдущем Makefile используйте его как базовый путь при импорте других Makefile. Более того, после Go 1.0,go toolИспользуйте его, чтобы найти компилятор Go (хранится в$GOROOT/pkg/tool/$GOOS_$GOARCH) и стандартной библиотеке (в$GOROOT/pkg/$GOOS_$GOARCH). Если вы Java-разработчик, вы можетеGOROOTпонимается какJAVA_HOME.

Скомпилируйте Go из исходного кода,GOROOTАвтоматическое обнаружение (all.bash в родительском каталоге), а затем установка цепочки инструментов.

Проверьте следующую команду:

$ echo $GOROOT

$ go env
/home/dfc/go

Двоичные пакеты, загруженные с golang.org или системные среды Go, также имеют правильный набор GOROOT в цепочке инструментов.

Например, в Ubutun 12.04 установлен Go 1.0.

$ dpkg -l golang-{go,src} | grep ^ii
$ go
/usr/bin/go
$ go env GOROOT
/usr/lib/go

Мы видим, что набор инструментов Go установлен в/usr/bin/goВниз,GOROOTвстроенный как/usr/lib/go

Почему это не должно быть установленоGOROOT

Мы не должны устанавливатьGOROOT, потому что в набор инструментов Go уже встроено правильное значение.

настраиватьGOROOTПереопределит значения по умолчанию, хранящиеся в цепочке инструментов go, что может привести к тому, что go будет выполнять разные версии файлов компилятора и стандартных библиотек.

В обоих случаях необходимо установитьGOROOT. в официальномВведение в установкуСвязанное описание.

  • Если вы являетесь пользователем Linux, FreeBSD или OS X, загрузите бинарные среды установки ZIP и Tarball. Эти бинарные среды по умолчанию находятся в /usr/local/go, рекомендуется установить GO в это место. Если вы этого не сделаете, вы должны быть установлены в указанный вами каталог.
  • Если вы являетесь пользователем Windows, установите с помощью двоичного пакета zip, по умолчаниюGOROOTв каталоге C:\Go. Если вы установили Go в другом месте, установитеGOROOTв указанный каталог.

другие детали

В этой статье уже было показано, что при компиляции среды Go из исходного кодаGOROOTКак автоматически обнаружить. но еслиGOROOTРазве это не соответствует тому, где находится all.bash? Например, чтобы скомпилировать среду Go во временную директорию, как ее правильно установитьGOROOTШерстяная ткань? Ответ заключается в использованииGOROOT_FINAL, который будет использоваться для переопределения автоматически обнаруженногоGOROOT, установите в набор инструментов GO.

Например, в Debian/Ubuntu программа сборки будетGOROOT_FINALустанавливается в /usr/lib/go. ХранитьGOROOTЯвляется ли состояние SENSET, создавая сборку с компиляцией. После завершения сборки установите To Too Toolchain в каталог / usr / bin и установите компилятор, исходный код и пакеты в / usr / lib / go.

будь осторожен

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

Хотя система сборки может автоматически определить, если родительский каталог all.bash не удовлетворяетGOROOTзапрос, но также должны быть обработаны отдельно.

Статья 2

Переведено из журнала коммитов Go по адресу:use os.Executable to find GOROOT.

GO 1.10 стартует, проходuse os.ExecutableнайтиGOROOT.

Раньше мы компилировали и собирали с помощью make.shGOROOT, но если вы переместите весь каталог на новый путь, это помешает правильной работе цепочки инструментов Go.

Как решить эту проблему?

Во-первых, исходный код можно перекомпилировать, но если новое расположение находится в каталоге другого пользователя, это может быть невозможно.

Во-вторых, через настройкуGOROOTПуть решения переменной окружения, но дополнительно устанавливаемGOROOTне рекомендуется, так как это может сделать окружающую средуgo toolиспользуется в другой средеcompile.

Эта модификация,go toolбудет определяться относительным путемGOROOT,используяos.Executeфункция. В то же время он также проверит$GOROOT/pkg/toolСуществует ли каталог, чтобы избежать следующих двух ситуаций.

$ ln -s $GOROOT/bin/go /usr/local/bin/go

и

$ PATH=$HOME/bin:$PATH
$ GOPATH=$HOME
$ ln -s $GOROOT/bin/go $HOME/bin/go

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