Google Protobuf的字段

1.基本字段类型

protobuf字段也可以是一个enum或另一个message

2.字段的限定标志

  required 必须的字段(尽量少使用required

  optional 可有可无

  repeated 可出现任意次

3.message定义格式

 message MyType {

    标志 类型  key,

 }

 key1229-1之间, 1 - 15应该保留给通信非常频繁的字段,以减少大小

4.如果你需要更新一个message时注意的事项:

  a.不要修改现有字段的序列号

  b.当有新字段需要添加时最好设置成optionalrepeated,这样就可以新旧兼容,最好也要加上default value

  c.非必须的字段可以去掉,序列号不能再使用,最好是先把这个字段重命名。比如加上OBSOLETE_,这样后面的开发人员就不会再使用该序列号

  d.非必须的字段可以在extension中实现,extension实现了预留序列号

  e.int32, uint32, int64, uint64,bool是兼容的,所以你可以修改这些字段的类型,不会影响到前后兼容性

  f.sint32sint64是兼容的,但是和其他字段类型不兼容

  g.stringbytes是兼容的,他们都需要采用UTF-8编码

  h.嵌套的messagebytes是兼容的

  i.fixed32 sfixed32兼容, fixed64sfixed64兼容

  j.改变一个字段的默认值一般是没有问题的

5.扩展字段Extensions

Foo就多了一个optional字段bar,访问bar的方式和其他的略有不同

Foo foo;

foo.SetExtension(bar, 15);

Foo会定义以下接口HasExtension(), ClearExtension(), GetExtension(), MutableExtension(),AddExtension().

扩展字段同样也可以嵌套定义

你可能感兴趣的:(总结沉淀)