Якими мають бути значення GOPATH та GOROOT?


323

Я намагаюся встановити 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
@Motin вищезазначене посилання більше не діє
Jorrit Reedijk

Файл застарів для проекту. Пов'язаний з цим питання , пов'язаний з OSX знаходиться тут: github.com/go-lang-plugin-org/go-lang-idea-plugin/issues/841
Мотін

Примітка: за замовчуванням GOPATHдля вас буде встановлено в Go 1.8 (2017). Дивіться мою відповідь нижче
VonC

Так, я виявив, що це також бентежить, як організуються хрещеники. Це допомогло: albertech.blogspot.com/2017/01/…
jar

1
@BenyaminJafari, тому що goinstallце справді давній до-Go1 і існував не з 2012 року.
Дейв C

Відповіді:


310

GOPATHобговорюється в cmd/goдокументації :

У GOPATHсписках змінних оточення місця шукати Go коду. У Unix значення є розділеною двокрапкою. У Windows значення є розділеною комою крапкою з комою. На Плані 9 значенням є список.

GOPATH необхідно встановити для отримання, створення та встановлення пакетів поза стандартним деревом Go.

GOROOTобговорюється в інструкції з монтажу :

Бінарні дистрибутиви Go припускають, що вони будуть встановлені в /usr/local/go(або c:\Goпід Windows), але інструменти Go можна встановити в іншому місці. У цьому випадку потрібно встановити GOROOTзмінну середовища для вказівки на каталог, в якому вона була встановлена.

Наприклад, якщо ви встановили Перейти до домашнього каталогу, ви повинні додати наступні команди до $HOME/.profile:

export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin

Примітка. GOROOT Потрібно встановити лише під час встановлення у власному місці.

(оновлена ​​версія відповіді Кріса Бунча .)


44
Набагато вичерпніша інформація про GOPATH знаходиться у розділі Як написати Go Code. Зробити там інформацію, необхідну для розуміння goкоманди, яка необхідна для роботи з Go. Наприклад, goinstallзараз слід використовувати в ОП go get.
Соня

13
Також зверніть увагу на фактичний шлях установки go. Наприклад, у налаштуваннях домашньої версії за замовчуванням встановлюється homebrew /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/щоб я працював з пивом.
Стівен Сорока

Я не можу запропонувати це редагування, оскільки додаток скаржиться на те, що в моєму редагуванні "схоже, міститься" неформатований код (який у нього немає; велике спасибі), але:
Wildcard

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


Я думаю, що цю відповідь простіше зрозуміти, оскільки є відповідність структури папок.
h-rai

Чи включає GOPATH цілі дерева проектів (наприклад, git) з непохідними файлами - наприклад, зображеннями, скриптами, файлами збірки тощо?
Серж Мерзляков

52

Перший пробіг go env.
Якщо ви бачите, що хода не встановлена, ви можете встановити її через homebrewабо через пакет та / або іншими способами.
Якщо ви бачите вихід, то ваш Goвстановлений.
Він показує вам усі перелічені налаштування, які не встановлені.

Якщо ви побачите порожній для 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

2
which goзробив це для мене. Він використовував інше місце установки установки з попередньої установки за допомогою Chocolatey. Видалили цю папку та видалили її зі змінної PATH. Зараз це працює. Дякую!
sgarg

which goкоманда не працювала для мене в Windows 7. Як я можу знайти, де мені запустити цю команду
firstpostcommenter

Відповідна команда Windows полягає в тому, що where goвона покаже вам шлях виконаного файлу
Falco

export GOPATH=~/GO_PROJECTSзробив роботу
Thamaraiselvam

39

GOPATHобговорюється тут :

GOPATHзмінної середовищі

GOPATH може бути встановлено у розділеному двокрапкою списку шляхів, всередині яких можуть бути знайдені код Go, об'єкти пакунків та виконувані файли.

Встановіть a, GOPATHщоб використовувати goinstall для створення та встановлення власного коду та зовнішніх бібліотек поза деревом Go (і щоб уникнути написання Makefiles).

І GOROOTобговорюється тут :

$GOROOTКорінь дерева Go, часто $HOME/go. Це за замовчуванням для батьків батьківського каталогу, де all.bashзапущено. Якщо ви вирішите не встановлювати налаштування $GOROOT, вам слід запустити gomake замість make або gmake при розробці програм 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 or go, він приземлятиметься в межах GOPATH. Ось чому він попереджає вас, що ви, безумовно, не хочете, щоб випадкові пакети з Інтернету були скинуті у вашу офіційну установку.


9

Починаючи з go 1.8 (Q2 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 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

в OSX, я встановлений з варити, ось настройка, яка працює для мене

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

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


-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 (і щоб уникнути написання Makefiles).



-3

Якщо ви використовуєте дистрибутив go, вам слід вказати, де містяться файли, наприклад:

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

(Це для Fedora 20)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.