protobuf命名规则

笔者最近在使用protobuf进行数据传输的时候,发现序列化后的proto数据使用node.js转化为json字符串后, proto数据中的变量如frameId自动变成了frameid, 导致不能正确的从json转换回proto数据格式,最后发现还是proto命名规则搞的鬼, 使用驼峰命名的成员变量如frameID, 在使用proto的方法进行赋值时,会默认变成: frame.set_frameid(int64),使得最后的变量转成了frameid名字,因此造成了问题. 故而笔者将proto命名规则转录于下,以后提醒自己,严格按照规范的文档进行编写.

Message And Field Names

Use CamelCase (with an initial capital) for message names – for example, SongServerRequest. Use underscore_separated_names for field names – for example, song_name.
按: message使用驼峰式命名, 首字母大写,成员数据使用下划线分隔命名

message SongServerRequest {
  required string song_name = 1;
}

Using this naming convention for field names gives you accessors like the following:

C++:
  const string& song_name() { ... }
  void set_song_name(const string& x) { ... }

Java:
  public String getSongName() { ... }
  public Builder setSongName(String v) { ... }

Enums

按: 枚举类型使用驼峰式命名, 首字母大写,每一项使用下划线大写分隔命名
Use CamelCase (with an initial capital) for enum type names and CAPITALS_WITH_UNDERSCORES for value names:

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

Each enum value should end with a semicolon, not a comma.

Services

按: grpc的函数接口使用驼峰式命名,首字母大写, 成员数据使用驼峰式命名
If your .proto defines an RPC service, you should use CamelCase (with an initial capital) for both the service name and any RPC method names:

service FooService {
  rpc GetSomething(FooRequest) returns (FooResponse);
}
Protocol Buffers (Protobuf) 命名空间用于组织相关的消息类型、服务等元素,防止它们之间的名称冲突。当遇到命名空间冲突时,你可以按照以下几种方式进行处理: 1. **明确限定**: 在使用类型时,通过完整的路径指定命名空间,如 `my_project.package_one.MessageType`,这样可以明确指出你要的是哪个命名空间内的类型,避免混淆。 2. **别名(alias)**: 使用`google.protobuf.message`这样的别名来代替全名,特别是在跨多个命名空间引用时,这可以使代码更简洁。但是,全局范围内的别名可能会导致隐式依赖,增加维护难度。 3. **分包设计**:合理地规划你的项目结构,把命名空间分布在不同的包里,这样可以在每个包内部管理冲突,减少冲突的概率。 4. **版本控制**: 对于大型项目,如果有必要,可以考虑创建不同的版本或分支,每个分支有自己独立的命名空间,避免直接冲突。 5. **代码重构**: 如果命名空间冲突是由项目设计不当引起的,可能需要重新考虑数据模型的设计,将相关性强的实体放到同一个命名空间内。 6. **配置文件**: 使用`.proto` 文件定义的`option java_multiple_files = true;` 或者 `option csharp_namespace = "";`等选项,让Protobuf工具分别生成不同命名空间的单独头文件,以分散命名空间冲突。 尽管Protobuf提供了上述解决方案,最好的实践还是保持良好的命名习惯,避免不必要的命名空间冲突。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值