Jetbrains Space + go get

Дано:

  • Вы используете Jetbrains Space1.
  • Вы пишите код на Go.
  • Вам необходимо создать общую библиотеку и подключать её как модуль в ваших внутренних проектах.

Ограничения:

  • В Space нельзя создавать вложенные подгруппы. В какой-то степени, это хорошо.
  • Каждая библиотека должна находиться в своём собственном репозитории.

В первую очередь настроим git. Добавьте в ~/.gitconfig следующую директиву:

[url "[email protected]/<org-name>"]
    insteadOf = https://<org-name>.jetbrains.space/

Здесь <org-name> — фрагмент доменного имени, принадлежащего вашей организации.

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

В проекте lib создайте репозиторий вашей библиотеки. Инициализируйте Go-модуль следующим образом:

go mod init <org-name>.jetbrains.space/lib/<lib-name>

Вместо <lib-name> подставьте название библиотеки/репозитория. В сам репозиторий положите код своей библиотеки и передайте его на сервер.

Для добавления вашей новой внутренней библиотеки в проект выполните следующие команды:

export GONOSUMDB=<org-name>.jetbrains.space
go get <org-name>.jetbrains.space/lib/<lib-name>

При таком раскладе Go не пойдет проверять по GOSUMDB вашу библиотеку и она подтянется как зависимость.

Что делать с переменной GONOSUMDB, решите самостоятельно:

  • её можно записать с помощью go env -w ...;
  • экспортировать в rc-файле вашей командной оболочки;
  • выставлять как переменную процесса каждый раз вручную.