使用 go-micro 的时候 etcd,grpc-gateway 产生冲突

go-micro遇到错误

//go.mod
module go-micro/micro

go 1.13

require (
    ....
    google.golang.org/grpc v1.26.0
    google.golang.org/protobuf v1.22.0
)

运行grpc-gateway http.main的时候报错

 undefined grpc.SupportPackageIsVersion6
 undefined: grpc.ClientConnInterface

原因是:

go get 安装的 protoc-gen-go是最新版本
那么protoc 生成的***.pb.go,会有一样
proto.SupportPackageIsVersion6,这个常量在proto包中是找不到的。

解决方案:

升级grpc库

go get google.golang.org/grpc@v1.27.0

grpc.SupportPackageIsVersion6

运行grpc-gateway(http)服务端,没问题。眼看就要成功了!,but
运行grpc服务端,报错:

github.com/coreos/etcd@v3.3.18+incompatible... undefined: resolver.BuildOption
github.com/coreos/etcd@v3.3.18+incompatible... undefined: resolver.ResolveNowOption

现在etcd和grpc v1.27.0产生冲突,那么陷入僵局。protoc --grpc-gateway_out=生成出来的pb.go代码需要grpc 1.27.0,而etcd需要grpc 1.26.0

解决方案:

1. 还原grpc到1.26.0

//go.mod
module go-micro/micro

go 1.13

require (
    ...
    google.golang.org/grpc v1.26.0
    google.golang.org/protobuf v1.22.0
)

2. protoc-gen-go 降级

go get -u -v github.com/golang/protobuf/protoc-gen-go@v1.3.0

参考

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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