.proto示例似乎都开始将其字段编号为1。
例如https://developers.google.com/protocol-buffers/docs/proto#simple
message SearchRequest {
required string query = 1;
optional int32 page_number = 2;
optional int32 result_per_page = 3;
}
如果可以使用零,它将使某些消息小一个或多个字节(即,一个或多个字段编号为16的字节)。
由于键只是(fieldnum << 3 | fieldtype)的varint编码,我无法立即了解为什么不应该使用零。
是否有理由不将字段编号从零开始?
一个非常直接的原因是:零字段号被拒绝protoc
:
test.proto:2:28: Field numbers must be positive integers.
至于为什么协议缓冲区是这样设计的,我只能猜测。一个很好的结果是,将检测到一个全零的消息为无效消息。它还可以在内部将“无字段”指示为协议缓冲区实现中的返回值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句