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