修改etcd依赖后执行go mod tidy遇unknown revision错误求助
解决go mod tidy报错unknown revision的方案
问题场景
我的仓库grpclb依赖etcd,etcd依赖grpc-go。因对grpc-go做了定制修改,我修改了etcd和grpclb的go.mod文件,但在grpclb仓库执行go mod tidy时出现以下错误:
go: github.com/lfch/etcd-io/client/v3@v3.5.13: reading github.com/lfch/etcd-io/client/client/go.mod at revision client/v3.5.13: unknown revision client/v3.5.13 go: github.com/lfch/etcd-io/client/v3@v3.5.13: reading github.com/lfch/etcd-io/client/client/go.mod at revision client/v3.5.13: unknown revision client/v3.5.13
我对etcd的修改内容(仅展示api/v3模块的go.mod):
module github.com/lfch/etcd-io/api/v3 go 1.19 require ( github.com/coreos/go-semver v0.3.0 github.com/gogo/protobuf v1.3.2 github.com/golang/protobuf v1.5.2 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/stretchr/testify v1.7.2 google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1 google.golang.org/grpc v1.47.0 ) replace ( google.golang.org/grpc => github.com/lfch/grpc v1.51.4 )
grpclb的go.mod引入的依赖:
require ( github.com/lfch/etcd-io/api/v3 v3.5.13 github.com/lfch/etcd-io/client/v3 v3.5.13 google.golang.org/grpc v1.48.0 )
错误原因
- 自定义的
github.com/lfch/etcd-io/client/v3模块缺少正确的结构与tag:Go模块解析v3.5.13版本时,需要远程仓库存在client/v3.5.13格式的tag,且client/v3目录下有独立的go.mod文件,模块名需与引用路径一致。 - Go模块replace规则不传递:etcd中对
google.golang.org/grpc的替换规则不会自动应用到grpclb,可能引发依赖解析冲突。 - 模块路径解析错误:错误信息显示尝试读取
github.com/lfch/etcd-io/client/client/go.mod,说明client/v3模块的go.mod配置路径不匹配。
解决步骤
1. 修正etcd仓库的模块结构与tag
- 在自定义etcd仓库的
client/v3目录下创建独立go.mod,设置模块名为github.com/lfch/etcd-io/client/v3,并同步grpc-go的replace规则:module github.com/lfch/etcd-io/client/v3 go 1.19 require ( github.com/lfch/etcd-io/api/v3 v3.5.13 // 补充client/v3所需的其他依赖 google.golang.org/grpc v1.47.0 ) replace google.golang.org/grpc => github.com/lfch/grpc v1.51.4 - 为
client/v3模块推送正确格式的tag到远程仓库:执行git tag client/v3.5.13,再运行git push origin client/v3.5.13(多模块仓库的子模块tag需遵循<子路径>/v<版本>格式)。
2. 补充grpclb的go.mod规则
- 添加自定义etcd模块的replace(本地开发可指向本地路径,远程tag就绪后可直接用远程地址):
// 本地开发场景 replace github.com/lfch/etcd-io/api/v3 => /path/to/your/local/etcd/api/v3 replace github.com/lfch/etcd-io/client/v3 => /path/to/your/local/etcd/client/v3 // 远程仓库场景(tag已推送) // replace github.com/lfch/etcd-io/client/v3 => github.com/lfch/etcd-io client/v3.5.13 - 同步grpc-go的replace规则,避免依赖冲突:
replace google.golang.org/grpc => github.com/lfch/grpc v1.51.4
3. 重新整理依赖
运行以下命令完成依赖同步:
go mod tidy
内容的提问来源于stack exchange,提问作者Fengchang Lv
相关产品推荐
相关产品推荐

