Как отследить, откуда возникает зависимость в модулях Go? - PullRequest
0 голосов
/ 29 октября 2019

У меня был бы модуль Go, скажем github.com/myorg/mymodule, из которого я хотел бы обновить версию в другом модуле. Однако, если я пытаюсь go get -u это, я получаю ошибку unexpected module path:

> go get -u github.com/myorg/mymodule
go: sourcegraph.com/sourcegraph/go-diff@v0.5.1: parsing go.mod: unexpected module path "github.com/sourcegraph/go-diff"
go get: error loading module requirements

Исправление для этого было задокументировано в https://github.com/sourcegraph/go-diff/issues/35:, этот модуль должен быть импортирован как github.com/sourcegraph/go-diff/diff, а не github.com/sourcegraph/go-diff.

Проблема в том, что я не знаю, где применить это исправление - то есть, какая зависимость импортирует эту подчиненную зависимость неправильным способом.

В частности, go-diff не появляется в go.mod, он появляется только в go.sum (в нескольких разных модулях):

> grep go-diff go.mod
> grep go-diff go.sum
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck=

Я пытался использовать go mod why, но это простосообщает, что модуль не нужен:

> go mod why sourcegraph.com/sourcegraph/go-diff
# sourcegraph.com/sourcegraph/go-diff
(main module does not need package sourcegraph.com/sourcegraph/go-diff)

Еще более удивительным является то, что в сообщении об ошибке упоминается go-diff@v0.5.1, тогда как go.sum содержит go-diff v0.5.0.

Все ввсе, как я могу отследить, где происходит этот «неправильный импорт» зависимости go-diff, чтобы я мог обновить свою версию этого модуля?

1 Ответ

0 голосов
/ 29 октября 2019

Мне удалось «исправить» эту проблему, запустив go get github.com/sourcegraph/go-diff и добавив эту директиву замены (см. https://github.com/golang/go/wiki/Modules#when-should-i-use-the-replace-directive) в модуле, в котором я пытался обновить зависимость:

replace sourcegraph.com/sourcegraph/go-diff => github.com/sourcegraph/go-diff v0.5.1

После этого go get -u github.com/myorg/mymodule работал без ошибок.

...