【问题标题】:protoc --go-grpc_out generate code in out of vision of --go_out generated codeprotoc --go-grpc_out generate code in out of vision of --go_out generated code
【发布时间】:2021-10-07 06:27:46
【问题描述】:

在 previos 产品中,我使用旧的 protoc-gen-go,它允许使用插件并在同一个 pb 文件中生成序列化/反序列化和 gRPC 客户端/服务器

据我了解,protoc-gen-go v1.27.1 不允许插件和需求使用 go-grpc_out 标志来处理客户端\服务器代码

按照这个命令

protoc -I /usr/local/include -I $PWD/api/dummy-proto  --go_out=generated --go-grpc_out=generated --go_opt=paths=source_relative proto/v1/foo.proto

我明白了

generated
|_proto
  |_v1
  |_dummy
  | |_foo_grpc.pb.go //package dummy
  |_foo.pb.go //package dummy

由于创建的“虚拟”文件夹 foo_grpc.pb.go 函数看不到 foo.pb.go 中生成的请求和响应

我做错了什么?是否可以像以前一样生成一个文件?将 foo_grpc.pb.go 移动到与 foo.pb.go 相同的级别后,它将正常工作。

也有可能使用像--go_out=import_path="这样的旧标志,并在像-go_out=import_path=grpc_v1_proto,M$PWD/proto/v1/foo.proto=grpc_v1_proto"这样的proto中使用没有斜杠和没有go_options的M声明包

foo.proto

syntax = "proto3";

package dummy.v1.foo;
option go_package = "proto/v1/dummy";

import "proto/v1/structures.proto";

service FooService {
  rpc reverse(ReverseRequest) returns (ReverseResponse);
  rpc getBar(GetBarRequest) returns (GetBarResponse);
}

message ReverseRequest {
  string text = 1;
}

message ReverseResponse {
  string reversed_text = 1;
}

message GetBarRequest {
}

message GetBarResponse {
  structures.Bar bar = 1;
}

【问题讨论】:

  • 添加--go-grpc_opt=paths=source_relative(或者,我的首选选项,go-grpc_opt=module=MODULEPATH)。
  • 天啊...谢谢!我在哪里可以找到所有标志和可能的值?
  • 在回复之前我自己快速浏览了一下,但找不到涵盖 gRPC 的文档。但是标志与 proto 插件相同,因此 that documentation 有帮助(同样适用于 grpc-gateway_optsummarised in this answer)。

标签: go protocol-buffers protoc


【解决方案1】:

根据 cmets,您需要添加 --go-grpc_opt=paths=source_relative。这在basics tutorial 中有介绍(但实际上只是给出了命令,没有太多细节)。

protoc-gen-go-grpc usesprotoc-gen-go 共享代码以处理大部分这些选项,因此Go Generated Code 的文档可能会回答您的问题(只需将go_opt 更改为go-grpc_opt)。

【讨论】:

    猜你喜欢
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 2020-07-17
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多