节俭转换可选为默认或必需

时间:2018-11-18 03:54:28

标签: c++ thrift

我有一个节俭的结构

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

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

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

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

1 个答案:

答案 0 :(得分:1)

this answer所述,Thrift中有3个等级(所谓的)需求:

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

要回答的问题:

  1. 可以安全地将optional更改为默认值(即删除optional关键字)。

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

要进一步阅读该主题,您可能需要咨询Diwaker Gupta强烈推荐的“ Missing Guide”。