首页 > 解决方案 > Thrift 将可选转换为默认或必需

问题描述

我有一个节俭的结构

struct Message {
    1: optional int userID;
    ...
} 

将其更改为默认要求是否安全?

struct Message {
    1: int userID;
    ...
} 

如果我知道它总是设置?“必需”呢?

标签: c++thrift

解决方案


本答案所述,Thrift 中有三个(所谓的)必要性:

  • required: 读时必须存在,写时必须设置
  • optional: 可以设置也可以不设置,完全可选
  • “默认”:读取时可能不存在,始终写入(除非它是null指针)

要回答提出的问题:

  1. 更改optional为默认值是安全的(即删除optional关键字)。

  2. 更改optionalrequired可能会破坏兼容性。除非您确保所有客户端/服务器都相应更新,否则旧端可能不会为此类字段提供值。在这种情况下,另一端将拒绝传入的请求或响应,因为required接收到的数据中缺少该字段。

有关该主题的进一步阅读,您可能需要咨询 Diwaker Gupta 强烈推荐的“缺失指南”。


推荐阅读