Protobuf中oneof、WrapValue、optional和FieldMask
  6BKnY894HcAS 2023年11月02日 31 0

本文介绍了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

假设现在需要实现一个更新书籍信息接口,我们可能会定义如下更新书籍的消息。

message UpdateBookRequest {
// 操作人
string op = 1;
// 要更新的书籍信息
Book book = 2;
}

但是如果我们的​​Book​​中定义有很多很多字段时,我们不太可能每次请求都去全量更新​​Book​​的每个字段,因为通常每次操作只会更新1到2个字段。

那么我们该如何确定每次更新操作涉及到了哪些具体字段呢?

答案是使用​​google/protobuf/field_mask.proto​​,它能够记录在一次更新请求中涉及到的具体字段路径。

详见:​​https://www.liwenzhou.com/posts/Go/oneof-wrappers-field_mask/#autoid-0-3-2​

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  5mjGlyXmoOly   2023年11月13日   18   0   0 Go区块链
  5mjGlyXmoOly   2023年11月02日   26   0   0 Go区块链
6BKnY894HcAS