You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改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
)

错误原因

  1. 自定义的github.com/lfch/etcd-io/client/v3模块缺少正确的结构与tag:Go模块解析v3.5.13版本时,需要远程仓库存在client/v3.5.13格式的tag,且client/v3目录下有独立的go.mod文件,模块名需与引用路径一致。
  2. Go模块replace规则不传递:etcd中对google.golang.org/grpc的替换规则不会自动应用到grpclb,可能引发依赖解析冲突。
  3. 模块路径解析错误:错误信息显示尝试读取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:55:20