0

Кто-нибудь может объяснить, почему GOPATH удобен и как его следует использовать в общем?

13

Я новичок в языке программирования Go, и каждый учебник начинается с настройки переменной окружения GOPATH для текущей папки проекта.

Неужели я что-то упускаю? Разве программист действительно должен вручную настраивать GOPATH каждый раз, когда он переходит в новую папку проекта с помощью команды cd? Я прочитал несколько записей в разделе FAQ о GOPATH, но так и не смог в этом разобраться.

И какая тогда роль переменной GOROOT? Для чего она нужна?

Существуют ли какие-нибудь автоматические инструменты, которые могут определить, находится ли текущая директория в корне проекта Go (например, по наличию какого-то скрытого файла), и автоматически устанавливать GOPATH на эту директорию?

Спасибо, буду благодарен за любые советы!

P.S. Например, если я разрабатываю совершенно независимые проекты Go A, B и C, должны ли они находиться в одной "рабочей" среде? Я думаю, что нет, но что тогда делать с GOPATH и GOROOT?

1 ответ(ов)

0

Цель переменной окружения GOPATH заключается в том, чтобы централизовать все пакеты в одном общем рабочем пространстве. Это не совсем новая концепция (вспомните, например, класс-путь Java), но использование GOPATH в Go значительно упрощается за счет отсутствия поддержки версий пакетов.

Программист Go не должен устанавливать GOPATH вручную при входе в новую папку проекта. Каждая папка проекта должна рассматриваться как отдельный пакет и находиться в GOPATH вместе с другими пакетами, поэтому GOPATH следует устанавливать только один раз. В учебниках начинают с установки GOPATH, чтобы изолировать рабочее пространство от всего остального (или просто предполагая, что пользователь еще не установил GOPATH).

Переменная GOROOT устанавливается для предоставления стандартных пакетов программисту Go, и вам не нужно с ней ничего делать. Вкратце, есть одно главное правило для GOROOT: никогда, ни при каких обстоятельствах не трогайте ее. Не устанавливайте в нее ничего, не модифицируйте стандартные пакеты и т. д.

Я не знаю инструмента для обнаружения проектов Go в текущей директории, но, думаю, создать его не должно быть слишком сложно.

Как вы будете управлять разными проектами — это уже на ваше усмотрение. "Go-способ" заключается в том, чтобы помещать каждый проект как пакет в директорию $GOPATH/src и делать все оттуда. Так как мне это не очень нравится, я определил свой GOPATH как $HOME/.go. Затем я помещаю каждый проект в отдельную директорию где-то еще (в любом месте на своем компьютере) и создаю символическую ссылку на директорию проекта в свою директорию $GOPATH/src. Таким образом, я могу использовать любые команды инструментов Go (например, go build myproject), использовать проект в качестве пакета для другого и т. д.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь