文章目录
此文档为.proto
文件提供了样式指南。通过遵循这些约定,您将使您的协议缓冲区消息定义及其相应的类一致且易于阅读。
请注意,协议缓冲区样式是随着时间的推移而发展的,因此您可能会看到用不同约定或样式编写的.proto文件。修改这些文件时,Please respect the existing style
。Consistency is key.
。但是,在创建新的.proto
文件时,最好采用当前最好的样式。
Standard file formatting
- 保持行长为80个字符
- 使用两个空格的缩进
File structure
应将文件命名为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
Packages
包名应该是小写的,并且应该对应于目录层次结构。例如,如果一个文件位于my/Package/
中,那么包名应该是my.Package
。
Message and field names
使用CamelCase(带有初始大写)作为消息名-例如,Song ServerRequest
。使用underscore_separated_names
(包括字段名和扩展名)-例如Song_name
。
message SongServerRequest {
required 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 fields
Use pluralized names for repeated fields.
repeated string keys = 1;
...
repeated MyMessage accounts = 17;
Enums
使用CamelCase(带有初始大写)表示枚举类型名称,并使用CAPITALS_WITH_UNDERSCORES
表示值名称:
enum Foo {
FOO_UNSPECIFIED = 0;
FOO_FIRST_VALUE = 1;
FOO_SECOND_VALUE = 2;
}
每个枚举值应该以分号结尾,而不是逗号。更喜欢以枚举值作为前缀,而不是在封闭的消息中包围它们。零值枚举应该具有UNSPECIFIED
后缀。
Services
如果您的.proto
定义了一个RPC服务,那么您应该同时使用CamelCase(带有初始大写)作为服务名称和任何RPC方法名称:
service FooService {
rpc GetSomething(FooRequest) returns (FooResponse);
}
Things to avoid(要避免的事)
- Required fields (only for proto2)
- Groups (only for proto2)