etcd套路(七)安裝clientv3報錯問題的解釋

huxiaobai_001發表於2020-08-25

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 協議》,轉載必須註明作者和本文連結
胡軍

相關文章