前言
本文翻译自谷歌官方文档Protocol Buffers Sytle Guide,内容有所增减。如有出入,请以官方文档为准。
标准文件格式
1. 每行长度不超过80个字符。
2. 使用2个空格缩进。
文件结构
文件的命名格式:lower_snake_case.proto
文件的内容应该按照如下顺序进行排列:
1.License header (if applicable)
2.File overview
3.Syntax
4.Package
5.Imports (sorted)
6.File options
7.Everything else
包
包的名称应该小写且和文件路径对应。比如,一个.proto文件在my/package/ ,那么它的包名应该为my.package。
消息和字段名
消息名称采用驼峰命名法,比如SongServerRequest。字段命名采用小写加下划线的命名方式,比如song_name。
message SongServerRequest{
string song_name=1;
}
采用这种命名规则为字段命名,会获得如下的存取器:
C++:
const string& song_name() {
... }
void set_song_name(const string& x) {
... }
Java:
public String getSongName() {
... }
public Builder setSongName(String v) {
... }
如果你的字段名包含数字,数字应该直接跟在字母后面而不是下划线后面,比如song_name1而不是song_name_1。
可重复字段
使用复数形式的名词为可重复字段命名。
repeated string keys=1;
repeated MyMessage accouts=17;
枚举
枚举类型名采用驼峰命名法,枚举值的命名采用全大写字母加下划线的命名方式。
enum Foo{
FOO_UNSPECIFIED=0;
FOO_FIRST_VALUE=1;
FOO_SECOND_VALUE=2;
}
每一个枚举值应该以分号结尾而不是逗号结尾。最好提前定义枚举值而不是将枚举放在消息内。为0的枚举值应该包含后缀UNSPECIFIED。
服务
如果你的.proto文件定义一个RPC服务,你应该为服务名称和方法使用驼峰命名法:
service FooService{
rpc GetSomething(FooRequest) Returns (FooResponse);
}
应该避免的事项
- 对字段使用Required修饰符(只适用于proto2)
- 使用Groups修饰符(只适用于proto2)