本文介绍了Protobuf常用的一些关键词字段,用于解决不同的场景下所产生的问题
oneof
通过使用oneof
字段来实现多个字段只能选择一种的功能
例如商城支持为用户推送最新的优惠信息,系统支持通过邮件和短信两个方式发送通知。但每一次只允许使用一种方式发送通知。这个场景下就可以使用oneof
字段来完成。
详见:https://www.liwenzhou.com/posts/Go/oneof-wrappers-field_mask/#autoid-0-0-0
WrapValue
当拿到一个message中的字段值,有时会出现无法判断该值是字段的0值还是该字段未赋值,可以通过使用google/protobuf/wrappers.proto
中定义的WrapValue来进行判断。
详见:https://www.liwenzhou.com/posts/Go/oneof-wrappers-field_mask/#autoid-0-1-3
optional
optional与WrapValue的使用场景相同,不过它可以通过关键字的方式直接定义对应的字段值,更加方便
详见:https://www.liwenzhou.com/posts/Go/oneof-wrappers-field_mask/#autoid-0-2-3
FieldMask
假设现在需要实现一个更新书籍信息接口,我们可能会定义如下更新书籍的消息。
但是如果我们的Book
中定义有很多很多字段时,我们不太可能每次请求都去全量更新Book
的每个字段,因为通常每次操作只会更新1到2个字段。
那么我们该如何确定每次更新操作涉及到了哪些具体字段呢?
答案是使用google/protobuf/field_mask.proto
,它能够记录在一次更新请求中涉及到的具体字段路径。
详见:https://www.liwenzhou.com/posts/Go/oneof-wrappers-field_mask/#autoid-0-3-2