Как мне узнать источник этого старого модуля Sirupsen?
Используйте бета-версию Go 1.13 (go get golang.org/dl/go1.13beta1 && go1.13beta1 download
) или даже лучше, попробуйте последнюю версию Go on tip / master (go get golang.org/dl/gotip && gotip download
).
В Go 1.13 улучшены сообщения об ошибках в целом. Это должно помочь в вашем случае, включая, скорее всего, отображение цепочки импорта, ведущей к ошибке.
Например:
$ gotip build .
go: example.com/temp/mod imports
github.com/docker/libcompose/docker imports
github.com/Sirupsen/logrus: github.com/Sirupsen/[email protected]: parsing go.mod:
module declares its path as: github.com/Sirupsen/logrus
but was required as: github.com/sirupsen/logrus
В этом примере вы можете видеть, что docker/libcompose/docker
импортирует старую, а теперь неверную версию Sirupsen/logrus
в верхнем регистре.
Наиболее частая причина, по которой люди видят несовпадение регистров Sirupsen/logrus
и sirupsen/logrus
, - это импорт github.com/docker/docker
или одного из других репозиториев докеров. Импорт репозиториев докеров немного сбивает с толку модули, в том числе потому, что:
- Репо
docker/docker
не следует за semver.
- There is a very old
v1.13.1
semver tag on the docker/docker
repo.
- Even though it is a couple years old, it is still the "latest" semver tag on that repo, and hence that old version is picked by default by the
go
command if you don't ask for a more specific version.
- Эта старая
docker/docker
версия импортирует старый и не неправильный верхний регистр Sirupsen/logrus
, что может затем вызвать ошибку, указанную в вопросе выше.
- Пакет клиента докера претерпел критические изменения после версии 1.13.1.
- Обычно существует путаница относительно
docker/docker
и docker/engine
репозиториев и того, какие пути импорта использовать.
- В репозиториях Docker нет
go.mod
файлов.
Для репозитория docker/docker
путь импорта остается github.com/docker/docker
, но он должен исходить из github.com/docker/engine
, поэтому часто рекомендуется, чтобы импортер докеров выполнял import "github.com/docker/docker"
и редактировал свои go.mod
примерно так:
require (
github.com/docker/docker v1.13.1
)
replace github.com/docker/docker => github.com/docker/engine <tag-or-commit-hash>
Проблема с докером # 39302 отслеживает попытки задокументировать, как импортировать репозитории докеров при использовании модулей.
person
typical182
schedule
02.08.2019
go mod why
? Хотя, если вы не можете разобратьgo.mod
, я не уверен, что вы можете сделать, кроме как удалить путь к вызывающему ошибку модулю. (также убедитесь, что вы используете последнюю версию go для генерацииgo.mod
и запускаетеgo mod tidy
) - person JimB   schedule 08.05.2019Sirupsen
в вашем коде. - person JimB   schedule 08.05.2019