除了Google提供的style guide相当短的内容之外,我还想到了如何命名Google协议缓冲区消息。
在消息类型名称末尾使用“消息”。
对于Java用户来说,java_outer_classname
中的Protos
结尾似乎是标准用户。
com.example.project.protobuf.MyProtos
,但我没有理由把它保留在那里,因为我们需要有一个包含类,所以它可能是移至com.example.protobuf.MyProtos
,除非项目的顶级包中没有类。从0开始枚举以匹配C / C ++。
对重复字段使用单数名称。
人们是否使用或与这些标准不同?
答案 0 :(得分:9)
免责声明:每天使用protobufs从Google员工那里回答。我决不以任何方式代表谷歌。
不要这样做。编译的协议缓冲区只是您正在使用的语言指定的类定义,并进行了一些改进。添加“消息”是额外的冗长。通常你只使用没有其他类定义的协议缓冲区,即使你使用其他类定义,只需导入java_outer_classname并从中做一个点。你甚至可以在代码中放置一个东西的完整路径来擦除一行导入,没问题。
虽然没有正式指定,但这听起来是个不错的建议,因为通常你会在一个文件夹中放置一个以上的原型。
通常从0开始。请参阅协议缓冲区语言指南。
是。阅读以下内容以获得使用它的感觉:https://developers.google.com/protocol-buffers/docs/javatutorial
答案 1 :(得分:3)
我不同意答案4.在链接文章中我只能找到这样的例子:
repeated PhoneNumber phones = 4;
repeated Person people = 1;
即使在https://developers.google.com/protocol-buffers/docs/proto3中,我们也只能找到复数:
repeated Result results = 1;
repeated string snippets = 3;
答案 2 :(得分:2)
您正在寻找的是 https://cloud.google.com/apis/design/ ,其中讨论了Google自己的API中使用的protobuf / gRPC设计惯例。
protobuf风格指南(https://developers.google.com/protocol-buffers/docs/style)就像你说的那样短暂。
答案 3 :(得分:0)
与此同时,Google似乎在https://developers.google.com/protocol-buffers/docs/style上为repeated
字段名称(第4点)添加了一个准则:
对重复的字段使用复数名称。
repeated string keys = 1; ... repeated MyMessage accounts = 17;
它为add_<field_name>
成员函数生成一个错误的函数名:
// Bad method name.
auto* const newKey = msg.add_keys();
// OK!
auto* const anotherNewKey = msg.mutable_keys()->Add();
// OK!
auto const * const allKeys = msg.keys();
auto const& firstKeys = msg.keys(0);
有人可能会说第一种方法无论如何都是多余的。通过使用mutable_<field_name>
成员函数,如果将多个字段名用于repeated
字段,则不会看到关于丑陋的方法名的任何问题。
因此,从现在开始,我将尝试遵循此准则。这样做的另一个原因:在C ++中,我们也倾向于对容器/集合使用复数变量名称,例如
auto keys = std::vector<std::string>{};