Golang中go mod vendor执行失败原因排查及求助

Golang中go mod vendor执行失败原因排查及求助 以下是我的命令行:

PS D:\src\github.com\lvhuat\http-service-example> go list -m all | findstr logrus
github.com/sirupsen/logrus v1.3.0
PS D:\src\github.com\lvhuat\http-service-example> go mod vendor
go: github.com/Sirupsen/logrus@v1.3.0: parsing go.mod: unexpected module path "github.com/sirupsen/logrus"
go: error loading module requirements
PS D:\src\github.com\lvhuat\http-service-example>

我已经检查了项目中所有的依赖项,发现没有代码依赖于github.com/Sirupsen/logrus大写版本),只有github.com/sirupsen/logrus小写版本

go.mod

module github.com/lvhuat/http-service-example

require (
	github.com/DeanThompson/ginpprof v0.0.0-20170218162546-8c0e31bfeaa8
	github.com/gin-gonic/gin v1.3.0
	github.com/go-sql-driver/mysql v1.4.1
	github.com/golang/protobuf v1.2.0
	github.com/gorilla/websocket v1.4.0
	github.com/jinzhu/gorm v1.9.2
	github.com/jinzhu/inflection v0.0.0-20180308033659-04140366298a // indirect
	github.com/json-iterator/go v1.1.5
	github.com/lestrrat-go/file-rotatelogs v2.2.0+incompatible
	github.com/lestrrat-go/strftime v0.0.0-20180821113735-8b31f9c59b0f // indirect
	github.com/lworkltd/kits v0.0.4
	github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
	github.com/sirupsen/logrus v1.3.0
)

但是当我运行go build -v时,一切似乎都很正常。


更多关于Golang中go mod vendor执行失败原因排查及求助的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang中go mod vendor执行失败原因排查及求助的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这个问题是由于依赖项中存在大小写不一致导致的。go mod vendor 对模块路径的大小写敏感,而 go build 相对宽松。

在你的 go.mod 中,github.com/sirupsen/logrus v1.3.0 是小写,但某个间接依赖可能引用了大写的 github.com/Sirupsen/logrus

运行以下命令来检查和修复:

go mod tidy
go clean -modcache
go mod vendor

如果问题仍然存在,检查所有依赖的 go.mod 文件:

go mod graph | findstr -i logrus

这会显示所有依赖 logrus 的模块,包括大小写版本。

你也可以尝试强制替换:

go mod edit -replace github.com/Sirupsen/logrus=github.com/sirupsen/logrus@v1.3.0
go mod vendor

或者直接删除 vendor 目录后重新生成:

rm -rf vendor
go mod vendor

在 Windows 上删除 vendor 目录:

rmdir /s vendor
go mod vendor

问题通常出现在 github.com/lworkltd/kits v0.0.4 或其他间接依赖中,它们可能引用了大写的 Logrus。运行 go mod tidy 通常会解决这种大小写不一致的问题。

回到顶部