gRPC/Protobuf 3语法:以分号和'{}'结尾的rpc行之间有什么区别?

psa*_*ord 14 protocol-buffers grpc

我已经看到了使用Protobuf v3声明gRPC服务的两种不同方式.有些代码的rpc行末尾带有分号(例如当前的proto3文档):

service SearchService {
  rpc Search (SearchRequest) returns (SearchResponse);
}
Run Code Online (Sandbox Code Playgroud)

其他代码的rpc行结尾为 {}:

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}
Run Code Online (Sandbox Code Playgroud)

这两个都使用protoc v3.0.0-alpha-2编译器编译并生成相同的(go)代码.

这两种语法有什么区别?

Eri*_*son 12

真的没什么; 他们是等同的.

{}时候有选择语法.如果您没有指定任何选项,则任何一种语法都可以正常工作(就像在C!中一样).

  • https://github.com/gengo/grpc-gateway利用它们进行REST→gRPC转换(仅供参考:在PR中将注释交换到https://github.com/google/googleapis/tree/上的注释主/谷歌/ API).像超时这样的东西最终也可以用一个选项指定,但我不认为那些已经定义了. (2认同)