protoc --go-grpc_out 生成代码在 --go_out 生成代码的视野之外

protoc --go-grpc_out generate code in out of vision of --go_out generated code

在以前的产品中,我使用旧的 protoc-gen-go,它允许使用插件并在同一个 pb 文件中生成 serialization/deserialization 和 gRPC client/server

据我所知,protoc-gen-go v1.27.1 将不允许插件并要求对 client\server 代码使用 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"

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_relativebasics tutorial 中对此进行了介绍(但实际上只是给出了没有太多细节的命令)。

protoc-gen-go-grpc uses code shared with protoc-gen-go to process most of these options so the documentation for Go Generated Code 可能会回答您的问题(只需将 go_opt 更改为 go-grpc_opt)。