В Golang мы можем указать библиотеки с открытым исходным кодом на GitHub в качестве зависимостей. Например:
import "github.com/RichardKnop/somelibrary"
Это попытается найти ветвь на основе вашей версии Go и по умолчанию будет работать, если я правильно понимаю.
Таким образом, нет способа импортировать конкретную версию зависимости, например:
import "github.com/RichardKnop/somelibrary#v1.4.8"
Какова наилучшая практика для управления зависимостями в Go тогда?
Я вижу два подхода.
I. Модули версии
Создать новые модули для основных версий с нарушениями?
Например, моя библиотека Go может определять модули v1 и v2, чтобы вы могли:
import "github.com/RichardKnop/somelibrary/v1"
Или:
import "github.com/RichardKnop/somelibrary/v2"
Основываясь на том, что вам нужно. Любые изменения, внесенные в v1 или v2, потребуются, чтобы не нарушать какие-либо API-интерфейсы или рабочие функции.
II. Ветвление
Это даст вам полный контроль над версией внешней зависимости, которую требует ваш код Go.
Например, вы можете форк github.com/RichardKnop/somelibrary в свою собственную учетную запись GitHub, а затем в вашем коде:
import "github.com/ForkingUser/somelibrary"
Затем вам нужно будет разблокировать все внешние зависимости, которые кажутся немного излишними. Однако это даст вам полный контроль над версиями. Вы могли бы держать свои вилки в той версии, которую, как вы знаете, работаете с вашим кодом, и только обновлять вилки после того, как вы проверили, что новые версии зависимостей ничего не нарушают.
Мысли?