Расскажите о GOPATH и GOROOT



Ответ



Переменная среды $GOPATH перечисляет места, где Go ищет рабочие пространства Go.



По умолчанию Go использует в качестве GOPATH расположение $HOME/go, где $HOME — корневой каталог учетной записи пользователя нашего компьютера. Для изменения этой настройки следует изменить переменную среды $GOPATH.



Дополнительную информацию по настройке переменной $GOPATH можно найти в документации по Go.



$GOPATH — это не $GOROOT

Переменная $GOROOT определяет расположение кода Go, компилятора и инструментов, а не нашего исходного кода. Переменная $GOROOT обычно имеет значение вида /usr/local/go. Переменная $GOPATH обычно имеет значение вида $HOME/go.



Хотя явно задавать переменную $GOROOT больше не нужно, она все еще упоминается в старых материалах.



Теперь поговорим о структуре рабочего пространства Go.



Анатомия рабочего пространства Go

Внутри рабочего пространства Go или GOPATH содержится три каталога: bin, pkg и src. Каждый из этих каталогов имеет особое значение для цепочки инструментов Go.

.

├── bin

├── pkg

└── src

└── github.com/foo/bar

└── bar.go



Давайте посмотрим на каждый из этих каталогов.



Каталог $GOPATH/bin — это место, где Go размещает двоичные файлы, компилируемые go install. Операционная система использует переменную среды $PATH для поиска двоичных приложений, которые могут выполняться без полного пути. Рекомендуется добавить этот каталог в глобальную переменную $PATH.



Например, если мы не добавим $GOPATH/bin в $PATH для выполнения программы, нам нужно будет выполнять запуск следующим образом:



$GOPATH/bin/myapp

При добавлении $GOPATH/bin в $PATH мы можем вызвать программу примерно так:



myapp

Каталог $GOPATH/pkg используется Go для хранения предварительно скомпилированных объектных файлов для ускорения последующей компиляции программ. Большинству разработчиков этот каталог не потребуется. Если у вас возникнут проблемы при компиляции, вы можете спокойно удалить этот каталог, и Go воссоздаст его.



В каталоге src должны находиться все наши файлы .go или исходный код. Их не следует путать с исходным кодом, который используют инструменты Go, и который находится в каталоге $GOROOT. При написании приложений, пакетов и библиотек Go мы помещаем эти файлы в каталог $GOPATH/src/path/to/code.



@golang_interview