go的”ambiguous import in multiple modules”
执行“go mod tidy”报如下错误:
go mod tidy -compat=1.17
go: finding module for package github.com/gomooon/goredis
go: found github.com/gomooon/goredis in github.com/gomooon/goredis v0.3.5
go: github.com/gomooon/core imports
github.com/gomooon/goredis imports
github.com/gin-gonic/gin/binding imports
github.com/ugorji/go/codec: ambiguous import: found package github.com/ugorji/go/codec in multiple modules:
github.com/ugorji/go v1.1.4 (/root/go/pkg/mod/github.com/ugorji/go@v1.1.4/codec)
github.com/ugorji/go/codec v1.2.7 (/root/go/pkg/mod/github.com/ugorji/go/codec@v1.2.7)
make: *** [Makefile.origin:16: build] Error 1
这个错误是由于 github.com/ugorji/go/codec 包存在多个版本冲突导致的,需要在 go.mod 文件中明确指定使用的版本。解决方案有两种:
-
- 在 go.mod 文件中添加 replace 指令
replace github.com/ugorji/go => github.com/ugorji/go v1.1.4
replace github.com/ugorji/go/codec => github.com/ugorji/go/codec v1.2.7
-
- 或者直接在项目根目录执行以下命令
# 先删除可能存在的冲突版本
go mod edit -dropreplace github.com/ugorji/go
go mod edit -dropreplace github.com/ugorji/go/codec
# 强制使用特定版本
go get github.com/ugorji/go@v1.1.4
go get github.com/ugorji/go/codec@v1.2.7
# 清理并更新依赖
go mod tidy