1、etcd使用过程中的错误
1.1 go mod tidy拉取etcd依赖包报错的问题
错误描述:
$ go mod tidy
go: etcd1/discovery imports
go.etcd.io/etcd/clientv3 tested by
go.etcd.io/etcd/clientv3.test imports
github.com/coreos/etcd/auth imports
github.com/coreos/etcd/mvcc/backend imports
github.com/coreos/bbolt: github.com/coreos/bbolt@v1.3.6: parsing go.mod:
module declares its path as: go.etcd.io/bbolt
but was required as: github.com/coreos/bbolt
原因:
由于etcd
版本管理的问题,导致etcd
的代码和新版本的grpc
冲突,会在编译时报错。可以在go.mod
里使用的
replace
命令指定使用v1.26.0
老版本,可以解决grpc
版本的问题。
解决方法:
go mod edit -replace github.com/coreos/bbolt=go.etcd.io/bbolt@v1.3.4
go mod edit -replace google.golang.org/grpc=google.golang.org/grpc@v1.26.0
1.2 运行go代码:undefined: grpc.SupportPackageIsVersion6 和 undefined: grpc.ClientConnInterface
错误描述:
$ go run server.go
# etcd2/proto
proto/simple.pb.go:236:12: undefined: grpc.ClientConnInterface
proto/simple.pb.go:240:16: undefined: grpc.SupportPackageIsVersion6
proto/simple.pb.go:250:10: undefined: grpc.ClientConnInterface
proto/simple.pb.go:253:30: undefined: 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
。
解决方法:
$ go install github.com/golang/protobuf/protoc-gen-go@v1.3.2
1.3 etcd v2/v3 api http协议调用curl版本问题
使用v2
接口调用会报not found
或者404
,此时要开启--enable-v2
。