Proto文件字段名含.、-解析报错及不支持字符列表咨询
Protobuf message字段名非法字符说明
在proto文件的message定义中,字段名使用.、-字符时触发missing field number解析错误,核心原因是这两个字符不属于Protobuf标识符允许的字符范围,解析器读取到该类字符时会判定当前字段名已终止,后续内容无法匹配「字段名 字段类型 = 字段编号」的语法规则,因此抛出缺失字段编号的错误。
字段名禁止使用的完整字符范围
Protobuf字段名遵循标识符命名规范,所有不符合规则的字符均不允许使用,具体禁止项如下:
- 禁止使用除ASCII大小写字母(a-z、A-Z)、数字(0-9)、下划线(
_)之外的所有字符,包括但不限于.、-、!、@、#、$、%、^、&、*、(、)、+、=、[、]、{、}、|、\、;、:、'、"、<、>、,、/、?、空格、制表符、换行符、非ASCII字符(如中文、全角符号等)。 - 禁止以数字作为字段名首字符,即使后续字符均为合法字符,首字符为0-9时也会触发解析错误。
- proto3版本强制禁止字段名全大写,违反该规则会直接触发编译错误;proto2版本虽不会强制拦截,但不符合官方命名规范,可能和生成代码的内置属性冲突。
补充说明:官方不建议使用下划线作为字段名首字符,该写法虽不会触发解析错误,但容易和各语言生成代码的内置保留字段、方法名重名,引发不必要的兼容问题。
错误写法示例
message Demo { string user.account = 1; // 含非法字符. int32 account-level = 2; // 含非法字符- }
合法写法示例
message Demo { string user_account = 1; int32 account_level = 2; }
内容的提问来源于stack exchange,提问作者PRAJAKTA DHIVAR
相关产品推荐
相关产品推荐

