grpc-gateway 运行时版本冲突

问题描述

从最近几天开始,protoc 生成器正在使用 github.com/grpc-ecosystem/grpc-gateway 的 v2 版本生成代码。我想继续使用 github.com/grpc-ecosystem/grpc-gateway v1.16.0。我无法删除导致冲突的 v2 版本。我尝试从 go.mod 中删除,从 $GOPATH 中清除。我想我的 protoc 生成器无法使用 v1 版本。请指导我如何同步 grpc-gateway 运行时包。

使用以下命令生成消息和服务

protoc -I . --go-grpc_out=. api/protobuf-spec/catalog_fetch/*.proto
protoc -I . --grpc-gateway_out=logtostderr=true:. api/protobuf-spec/catalog_fetch/*.proto

注意:它同时生成了 grpc.pb.go 文件和 pb.go 文件,这进一步导致了问题。

cannot use mux (type *"github.com/grpc-ecosystem/grpc-gateway/runtime".ServeMux) as type *"github.com/grpc-ecosystem/grpc-gateway/v2/runtime".ServeMux ```

解决方法

我认为您已经安装了 v2 版本的生成器。不幸的是,您不能将 v1.16.0 与较新版本的 go protobuf 生成器一起使用。如果您想继续使用 v1.16.0,可以从发布页面 https://github.com/grpc-ecosystem/grpc-gateway/releases/tag/v1.16.0 下载生成器。

,

我花了 3 个小时调试完全相同的问题。

您必须从 GOPATHGOROOT 中删除二进制文件。

为简单起见,只需使用 which protoc-gen-grpc-gateway

这应该会指向您正在使用的二进制文件 protoc。删除它并重新运行 go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway@v1.16.0

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...