解决go项目引进etcd/clientv3的一个报错grpc版本过高的两个方法
在使用etcd 做服务注册和发现,编译时提示 下列错误:
# github.com/coreos/etcd/clientv3/balancer/picker
F:\Go\pkg\mod\github.com\coreos\etcd@v3.3.22+incompatible\clientv3\balancer\picker\err.go:37:44: undefined: balancer.PickOptions
F:\Go\pkg\mod\github.com\coreos\etcd@v3.3.22+incompatible\clientv3\balancer\picker\roundrobin_balanced.go:55:54: undefined: balancer.PickOptions
# github.com/coreos/etcd/clientv3/balancer/resolver/endpoint
F:\Go\pkg\mod\github.com\coreos\etcd@v3.3.22+incompatible\clientv3\balancer\resolver\endpoint\endpoint.go:114:78: undefined: resolver.BuildOption
F:\Go\pkg\mod\github.com\coreos\etcd@v3.3.22+incompatible\clientv3\balancer\resolver\endpoint\endpoint.go:182:31: undefined: resolver.ResolveNowOption
原因是 google.golang.org/grpc 1.26 后的版本是不支持 clientv3 的,有两个方法可以解决这个问题,
第一种方式:
只需要把grpc改成 1.26 版本的即可,具体操作方法是在 go.mod 里加上:
具体操作方法是在 go.mod 里加上:
replace google.golang.org/grpc => google.golang.org/grpc v1.26.0
第二种方法:
如果必须在项目中使用更高版本的grpc,则只需要引用更高版本的etcd库即可,代码如下:
import (
"go.etcd.io/etcd/client/v3"
)
即 import 时把 go.etcd.io/etcd/client/v3 替代 go.etcd.io/etcd/clientv3
然后 go.mod 中使用 go mod init 或者 go mod tidy, 我的依赖情况如下:
require (
go.etcd.io/etcd/client/v3 v3.5.12 // indirect
google.golang.org/grpc v1.59.0 // indirect
)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用