解决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

)

posted @   叨叨见血  阅读(382)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
点击右上角即可分享
微信分享提示