Самый частый вопрос при обучении Go
Если вы новичок в Go, скорее всего, вы слышали о GOROOT и GOPATH, и вам может быть интересно, что они собой представляют или в чем между ними разница. Ты не один! Это один из наиболее часто задаваемых вопросов о Go. У меня тоже был этот вопрос, когда я начал изучать Go.
Это руководство для начинающих, которое должно ответить на все ваши вопросы о GOROOT и GOPATH.
Так что же это такое?
- Во-первых, и GOROOT, и GOPATH — это переменные среды, которые указывают на два каталога в вашей системе — будь то Windows, Mac или Linux.
- Компилятор Go использует эти переменные для создания и запуска программ Go.
- Когда вы устанавливаете Go, для них устанавливаются значения по умолчанию. Однако вы можете изменить их (объяснено в следующем разделе).
- В MacOS значение GOROOT по умолчанию —
/usr/local/go
(или/usr/local/Cellar/go
, если вы установили Go с помощью HomeBrew). Значение по умолчанию для GOPATH —$HOME/go
.
Чем GOROOT и GOPATH отличаются друг от друга?
Хотя они могут показаться похожими, GOROOT и GOPATH имеют разные цели.
GOROOT
- GOROOT — это каталог установки Go в вашей системе.
- Здесь компилятор Go находит системные пакеты для Go, такие как
fmt
,strings
,net/http
. Пакеты, поставляемые по умолчанию с Go. - Здесь также находится двоичный файл Go, используемый для запуска программ Go.
GOPATH
- GOPATH — это каталог, в который компилятор Go устанавливает и импортирует дополнительные пакеты Go (или библиотеки), например, из Github.
- В отличие от некоторых других языков программирования, где вы можете импортировать пакеты из любого каталога (и иметь исходный код в любом месте в системе), Go ожидает, что все пакеты и исходный код будут находиться в каталоге GOPATH (исключением является случай, когда вы используете модули Go, о которых я подробно расскажу в следующем посте).
- При запуске
go get
илиgo install
в каталог GOPATH устанавливаются новые пакеты.
Пример:
Когда вы запускаете команду ниже -
go install github.com/gin-gonic/gin@master
Go устанавливает пакет gin (http-веб-фреймворк для Go) с Github в GOPATH. В частности, пакет gin будет установлен в каталоге — $GOPATH/src/github.com/gin-gonic/gin
Позже, когда вы импортируете gin в программу Go, как показано ниже —
import "github.com/gin-gonic/gin"
Используется пакет gin из указанного выше каталога (в GOPATH).
Документацию по GOPATH можно найти здесь.
Как просмотреть текущие GOROOT и GOPATH?
После того, как вы установили Go, вы можете проверить свои текущие GOROOT и GOPATH с помощью команды ниже:
go env | grep -E 'GOPATH|GOROOT'
Как видно из снимка выше, в моей системе -
GOROOT указывает на каталог /usr/local/go
и
GOPATH указывает на /Users/lakhansaiteja/coding/golang/gopath
Он может отличаться от значений GOROOT и GOPATH в вашей системе, потому что я изменил GOPATH на другой каталог, где находится весь мой исходный код Go.
Как изменить GOROOT и GOPATH?
Один из самых простых способов изменить GOROOT и GOPATH — экспортировать эти переменные среды по нужному пути в вашем профиле zsh (или bash), как показано ниже:
export GOPATH=/Users/lakhansaiteja/coding/golang/gopath
Загрузите свой профиль zsh (или bash) после экспорта, чтобы применить изменения.
Если мы встречаемся впервые, привет! Я Лакхан. Я инженер-программист, увлеченный распределенными системами, облаком, Kubernetes и Golang. Я тоже люблю о них писать.
Спасибо, что прочитали. До скорого. Чао!