Проблема с раздвоенной копией пакетов go заключается в том, что когда пакет действительно состоит из нескольких пакетов go в одном репо, операторы импорта ссылаются на исходное базовое репо, то есть: github.com/orig/repo
.
Это непроблема для репозиториев с одним пакетом go, поскольку он никогда не ссылается на себя.
Но если он имеет несколько, то есть: package github.com/orig/repo/A
import github.com/orig/repo/B
И тогда вы разветвляете его как: github.com/fork/repo
Затем, когда компилятор go видитimport "github.com/orig/repo/B"
в исходном коде, идет загрузка исходной версии, а не вашего форка.
К счастью, go modules решает эту проблему.
По сути, создайте go.mod
в верхней части вашего разветвленного репо и добавьте: module github.com/orig/repo
, тогда компилятор go будет считать, что вы «orig / repo» независимо от того, откуда вы на самом деле выписаны.
поэтому, когда orig/repo/A
импортирует orig/repo/B
, он будет выглядеть локально.
Если есть другие операции импорта, которые необходимо переопределить и которые находятся за пределами основного разветвленного репо, вы также можете принудительно установить зависимости из другого места.используя заменить