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
如下图所示:
然后继续 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-go
与google.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 协议》,转载必须注明作者和本文链接
兄弟们注意了,包名变了:go.etcd.io/etcd/client/v3