etcd套路(七)安装clientv3报错问题的解释

golang当中操作etcd必须 go get go.etcd.io/etcd/clientv3
但是会报错如下:

# 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的。

也就是说要把这个改成1.26版本的就可以了。

第一种方式:
具体操作方法是在go.mod里加上:

replace google.golang.org/grpc => google.golang.org/grpc v1.26.0

如下图所示:
etcd套路(七)安装clientv3报错问题的解释
然后继续 go.etcd.io/etcd/clientv3看是否还报错!

如果不行那你就尝试下边的

第二种方式:
更新grpc的版本为1.26.0版本试试看:

go get -u -x google.golang.org/grpc@v1.26.0

下载完成后将 $GOPATH/pkg/mod/google.golang.org/grpc@v1.26.0 文件重命名为 grpc ,并放到 $GOPATH/src/google.golang.org/grpc 目录下

=====================================================================

现在你去编译自己的go文件的时候可能会报错:
undefined: grpc.SupportPackageIsVersion6 grpc.ClientConnInterface的问题
这是由于protoc的 go语言插件protoc-gen-gogoogle.golang.org/grpc版本不兼容所致,
因为grpc降了到了v1.26.0,高版本protoc-gen-go编译出来的your-module.pb.go不兼容低版本的grpc,
所以protoc-gen-go也要相应降级。
我使用二分法找到protoc-gen-go兼容grpc v1.26.0的最新版本是v1.3.2.
知道对应版本之后接下来就简单了,运行下面的命令获取该版本并编译二进制文件GOPATH/bin/protoc-gen-go

go get github.com/golang/protobuf/protoc-gen-go@v1.3.2

重新编译your.proto生成your-module.pb.go文件,最后重新编译工程你会发现编译错误消失了

本作品采用《CC 协议》,转载必须注明作者和本文链接
胡军
讨论数量: 1

兄弟们注意了,包名变了:go.etcd.io/etcd/client/v3

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!