本文介绍.proto文件的编码风格。遵循下面的惯例,可以使你的protocol buffer消息定义和它们对应的类连贯且已读。

注意,protocol buffer风格随时间变化一直在进步,所以可能你会在写成的.proto文件看到不同的惯例或风格。在你修改这些文件时请考虑已有风格连贯是关键。然而在创建新的.proto文件时,最好是采用目前最流行的风格。

标准文件格式

  • 每行最多80个字母。
  • 缩进使用2个空格。

文件结构

文件命名应该使用lower_snake_case.proto格式。

所有的文件都应该最受下列方式:

  1. 许可头(如果有的话)
  2. 文件概览
  3. 语法
  4. 导入项(排序后的)
  5. 文件选项
  6. 剩下的

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

消息和字段名称

使用驼峰(首字母大写)命名消息名称 -- 例如,SongServerRequest。使用下划线连接命名字段名(包括oneof字段和扩展名称) -- 例如,song_name

message SongServerRequest {
string song_name = 1;
}

字段使用命名规范会生成如下格式的访问器:

const string& song_name() { ... }
void set_song_name(const string& x) { ... }
public String getSongName() { ... }
public Builder setSongName(String v) { ... }

如果你的字段名称包含数字,那数字应该紧在最后一个字母后面而不是下划线,例如,要用song_name1而不是song_name_1

重复字段

对重复字段使用复数名称:

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

枚举

使用驼峰(首字母大写)命名枚举类型,使用大写加下划线命名变量名称:

enum Foo {
FOO_UNSPECIFIED = 0;
FOO_FIRST_VALUE = 1;
FOO_SECOND_VALUE = 2;
}

每个枚举变量都应该使用分号结束,而不是逗号。使用前缀枚举值,不用闭包消息包围。0值得枚举值应该有UNSPECIFIED后缀。

服务

.proto中定义RPC服务,对于服务名称和RPC方法名称,你应该使用驼峰(首字母大写)命名。

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

要避免的事

  • Required字段(仅针对proto2,应为proto3从语法层面取消了required
  • Groups(仅针对proto2)

更多信息,参见这里

Proto3:风格的更多相关文章

  1. Protocol Buffers官方文档(proto3语言指南)

    本文是对官方文档的翻译,大部分内容都是引用其他一些作者的优质翻译使文章内容更加通俗易懂(自己是直译,读起来有点绕口难理解,本人英文水平有限),参考的文章链接在文章末尾 这篇指南描述如何使用protoc ...

  2. Proto3:C++代码生成指南

    本章节实际上是介绍Protocol Buffer编译器从给定的protocol定义中生成的C++代码.所有proto2和proto3生成的代码不同之处都会高亮标出 --- 需要注意的是这些不同之处只是 ...

  3. Proto3使用指南

    这篇指南讲述如何使用Protocol Buffers来结构化你的Protocol Buffer数据,包括.proto文件语法以及如何从.proto文件生成你的访问类型.本文主要涵盖了proto3的语法 ...

  4. 关于自己写C++的一点风格

    现在,我学了很长时间的C++,但是自己就是无法精通.许多知识是入门书上没有的.现在写C++最重要的就是风格问题. 我现在的C++风格: 把自己所有的东西都放在一个名称空间下. 没有全局的函数,有的函数 ...

  5. Photoshop将普通照片快速制作二次元漫画风格效果

    今天为大家分享Photoshop将普通照片快速制作二次元漫画风格效果,教程很不错,对于喜欢漫画的朋友可以参考本文,希望能对大家有所帮助! 一提到日本动画电影,大家第一印象肯定是宫崎骏,但是日本除了宫崎 ...

  6. 「标准」的 JS风格

    首先,这份 JS风格指南已经在我司的前端团队实行半年多了: 其次,在程序员的世界里,从入行到资深都需要面对几个世界级的难题,如: 世界上最好的编辑器是什么? 是用空格还是 TAB?用空格还特么衍生出 ...

  7. 无需编译、快速生成 Vue 风格的文档网站

    无需编译.快速生成 Vue 风格的文档网站 https://docsify.js.org/#/#coverpage https://github.com/QingWei-Li/docsify/

  8. C++服务器开发之基于对象的编程风格

    Thread.h #ifndef _THREAD_H_ #define _THREAD_H_ #include <pthread.h> #include <boost/functio ...

  9. 学习SpringMVC——你们要的REST风格的CRUD来了

    来来来,让一下,客官,您要的REST清蒸CRUD来了,火候刚刚好,不油不腻,请慢用~~~ 如果说前面是准备调料,洗菜,切菜,摆盘,那么今天就来完整的上道菜,主要说的是基于REST风格实现数据的增删改查 ...

随机推荐

  1. ORB-SLAM2的编译运行以及TUM数据集测试

    ORB-SLAM2的编译运行以及TUM数据集测试 徐大徐 2018.02.06 17:04 字数 1838 阅读 2167评论 0喜欢 2 近段时间一直在学习高翔博士的<视觉SLAM十四讲> ...

  2. JavaSE--[转]加密和签名的区别

    转载 http://blog.csdn.net/u012467492/article/details/52034835 私钥用来签名的,公钥用来验签的.公钥加密私钥解密是秘送,私钥加密公钥解密是签名 ...

  3. windows之anaconda导入torch失败和pip install命令执行read time out

    昨天用jupyter导入torch还好好的呢,今天用就不行了,先是ImportError: DLL load failed: 找不到指定的模块.再是No such comm target regist ...

  4. Java统计内存

    在目标代码前放置 Runtime r = Runtime.getRuntime(); r.gc(); long startMem = r.freeMemory(); // 开始时的剩余内存 目标代码执 ...

  5. 大言不惭 swank? talk about sth or speak too confidently

    cán,意思是指说大话而毫不感到难为情.出自<论语·宪问>:“子曰:‘其言之不怍,则为之也难.’”宋·朱熹注:“大言不惭,则无必为之志,而不自度其能否也.欲践其言,其不难哉!” 是不是类似 ...

  6. 网络流dinic板子

    bool bfs(){ memset(deep,0,sizeof(deep)); queue<int>que; que.push(s); deep[s]=1; while(!que.emp ...

  7. Linux磁盘空间满的诡异问题解决方案

    问题描述: 今天登上一台服务器,df -h 发面根目录磁盘已经满了 解决过程: cd / du -sh *  发现并没有大文件,占用的空间没多大 根据经验,先通过lsof | grep deleted ...

  8. q检验|新复极差法|LSD|二因素方差分析

    生物统计与实验设计 放大程度q检验:精度较高>新复极差法:各种错误比较平均>LSD 其中,LSD不随M的变化而变化,但是SSR和q-test会随M变化而变化. 第一步代表了方差分析的核心思 ...

  9. supervisor安装与配置实践版

    应用场景 系统:centos7 需求:监控一个swooleWebSocket.php文件,程序使用的是8080端口,挂了自动被supervisor拉起来 一.首先要安装supervisor软件 yum ...

  10. OneDrive for Business

    一.界面介绍 1.在Office 365主页 点击“OneDrive”登陆 2.进入OneDrive,可对文档进行存储.同步并共享文档. 3.点击,可对文档进行编辑.分享.重命名等操作 二.文档同步 ...