【发布时间】: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_opt和 summarised in this answer)。
标签: go protocol-buffers protoc