Вот несколько гипотетических гипотетических примеров:
go.mod
module github.com/example/project
require (
github.com/SermoDigital/jose v0.0.0-20180104203859-803625baeddc
github.com/google/uuid v1.1.0
)
exclude github.com/SermoDigital/jose v0.9.1
replace github.com/google/uuid v1.1.0 => git.coolaj86.com/coolaj86/uuid.go v1.1.1
exclude
В случае пакета github.com/SermoDigital/jose
он имеет надлежащийgit-тег для v0.9.1
, но текущей версией является v1.1
, что является NOT правильным тегом git (отсутствует версия "patch").
Исключая сломанную версиюприводит к тому, что go mod выбирает master
.
replace
Аналогично (и действительно гипотетически), если у меня есть патч для github.com/google/uuid
, я могу создать форк и использовать replace
чтобы получить свою собственную версию, пока я жду, когда вышестоящая версия примет мой патч (или нет).