当前位置: 首页 > 知识库问答 >
问题:

在生成的代码中的错误,在协议-根-grpc-网关

吕昀
2023-03-14

我是协议缓冲区和gRPC的新手。现在我正在尝试在Go中使用grpcgrpc-网关构建客户端/服务器架构。

我试着效仿一些例子,但最终总是遇到同样的问题。用protoc生成代码后,我运行go build,得到了这个错误:

proto/helloworld/hello_world.pb.gw.go:64:2: cannot use msg (type *HelloReply) as type protoreflect.ProtoMessage in return argument:
        *HelloReply does not implement protoreflect.ProtoMessage (missing ProtoReflect method)
proto/helloworld/hello_world.pb.gw.go:98:2: cannot use msg (type *HelloReply) as type protoreflect.ProtoMessage in return argument:
        *HelloReply does not implement protoreflect.ProtoMessage (missing ProtoReflect method)

这是go.mod:

module github.com/riccardopedrielli/grpc-gateway-test

go 1.15

require (
    github.com/golang/protobuf v1.4.3
    github.com/grpc-ecosystem/grpc-gateway/v2 v2.2.0
    google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea
    google.golang.org/grpc v1.35.0
    google.golang.org/protobuf v1.25.0
)

这是hello_world.proto

syntax = "proto3";

package helloworld;

import "google/api/annotations.proto";

option go_package = "github.com/riccardopedrielli/grpc-gateway-test/proto/helloworld";

// Here is the overall greeting service definition where we define all our endpoints
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {
    option (google.api.http) = {
      get: "/v1/example/echo/{name}"
    };
  }
}

// The request message containing the user's name
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

这是指向存储库的链接:https://github.com/riccardopedrielli/grpc-gateway-test

我看到生成的go文件之间的一个区别是它们导入了不同的协议库。
proc-gen-go导入github.com/golang/protobuf/proto生成的文件。
proc-gen-grpc-网关导入google.golang.org/protobuf/proto生成的文件。
这可能是问题的原因吗?

我仍然不清楚应该使用哪一个,以及如何在两个发电机中强制使用相同的。

我是grpc的新手,在这一点上很迷茫,所以我可以省略一些重要的信息。欢迎任何建议。

非常感谢。

共有2个答案

唐和洽
2023-03-14

为了生成存根,我们可以使用protoc或bufprotoc是业界广泛使用的更经典的一代体验。不过,它有一个相当陡峭的学习曲线

您应该查看gRPC网关上的教程系列,即。,https://grpc-ecosystem.github.io/grpc-gateway/docs/tutorials/.此外,您可以参考我的简单hello world程序,该程序使用gRPC网关,即。,https://github.com/iamrajiv/helloworld-grpc-gateway.

胡志
2023-03-14

好吧,我解决了这个问题。

我通过snap安装了protoc,稳定通道的版本是3.11.4

现在我升级到了3.14.0,一切都很好。

 类似资料:
  • 正如问题所说,我从源代码编译了grpc,也做了,但是,grpc_python_plugin的

  • 我想将一个协议(由grpc生成)转换为JSON。 我知道protobuf可以使用:(https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/util/JsonFormat)但这并没有包含在Android系统中的()中,它是Android系统中使用的(https://github.c

  • 问题内容: 我正在尝试使用.get方法使用Alamofire调用服务。该请求没有什么特别的,没有任何参数,只是一个Authorization标头。 我在这里有点生气,因为当我在具有相同URL和授权令牌的邮递员上运行请求时,请求工作正常,但是当我使用Alamofire运行应用程序代码时,它将返回此错误: 错误域= NSPOSIXErrorDomain代码= 100“协议错误” UserInfo =

  • 我试图在codenameone中构建一个示例,当我试图生成ios构建时,我在codenameone构建服务器下的构建中得到了像"构建错误"这样的错误。 这是我得到的错误日志 如果有人对此有想法,请帮助我... 对不起,我的英语很差。。 提前谢谢。。

  • 本文档作为 gRPC 在 HTTP2 草案17框架上的实现的详细描述,假设你已经熟悉 HTTP2 的规范。产品规则采用的是ABNF 语法 大纲 以下是 gRPC 请求和应答消息流中一般的消息顺序: 请求 → 请求报头 *有定界符的消息 EOS 应答 → 应答报头 *有定界符的消息 EOS 应答 → (应答报头 *有定界符的消息 跟踪信息) / 仅仅跟踪时 请求 请求 → 请求报头 *界定的消息 E

  • 我正在尝试使用maven protoc插件和我在Cygwin中构建的protoc可执行文件编译协议缓冲区代码。我无法从Cygwin或Windows命令行执行此操作。下面是我在Windows中运行它时得到的输出,但从Cygwin运行时的错误是相同的。我觉得这很奇怪,因为如果问题是路径转换,那么我希望其中一个可以工作。这个可执行文件是用Cygwin的g构建的,这可能会影响到事情吗?(显而易见,该目录确