Самый частый вопрос при обучении 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. Я тоже люблю о них писать.

Спасибо, что прочитали. До скорого. Чао!