04.语法风格手册

翻译自: Style Guide

本文提供了.proto文件的样式指南,遵循这些约定,可以使Protocol Buffersmessage定义与其生成的类更容易阅读。

请注意,Protocol Buffers 风格一直在发展,所以,您很可能会看到以不同约定或风格编写的 .proto 文件,修改这些文件时请保持现有样式。一致性很重要。 但是在创建新的 .proto 文件时采用最好采用最佳风格。

标准文件格式

  • 保请行长度为 80 个字符
  • 使用 2 个空格缩进
  • 最好对字符串使用双引号

文件结构

文件应命名为采用 lower_snake_case.proto 样式

文件内容按以下方式排序:

License Header (如果需要) File overview Syntax Package Imports (排序) File options Everything else

包名应该是小写,并且应该与目录层次结构相对应。 例如,如果一个文件在 my/package/ 中,那么包名应该是 my.package

消息和字段名

消息名以驼峰式命名(首字符大写)例如:SongServerRequest,字段名以下划线分割单词的方式命名(包括 oneof 和 扩展名),例如: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 字段

使用复数名词命名repeated字段。

repeated string keys = 1;
...
repeated MyMessage accounts = 17;

枚举

枚举名以驼峰式命名(首字符大写),使用以下划线分割大写字符拼写单词的方式命名枚举值名称。示例如下 :

enum Foo {
  FIRST_VALUE = 0;
  SECOND_VALUE = 1;
}

每个枚举值以分号(;)结尾,不是逗号(,)。优先为枚举值添加前缀,不要把枚举放在 message 定义中。零值应该使用 UNSPECIFIED 作为后缀。

服务

如果.proto定义了RPC服务,服务名和RPC方法都应以驼峰式命名(首字符大写)。

service FooService {
  rpc GetSomething(FooRequest) returns (FooResponse);
}