gpt4 book ai didi

thrift - 如何使必填字段成为可选字段?

转载 作者:行者123 更新时间:2023-12-04 13:47:51 30 4
gpt4 key购买 nike

在thrift中制作required字段optional的最佳过程是什么?例如,我有一个结构...

struct Message {
1: required double userID;
2: required string content;
...
}

...但是我想将 content设为可选。

编辑:为澄清起见,我已经有使用此结构的使用者,所以我需要在不破坏这些使用者的情况下对其进行更新。分阶段升级就可以了(例如,添加一个新的 optional字段,更新下游客户端,然后删除(或停止使用)旧的 required字段)。

最佳答案

不能这样,因为俗话说永远是。以下是Diwaker Gupta强烈推荐的"Missing Guide"的引文。几乎确定了为什么在使用required之前(至少)应该三思而后行:

Required Is Forever

You should be very careful about marking fields as required. If at some point you wish to stop writing or sending a required field, it will be problematic to change the field to an optional field — old readers will consider messages without this field to be incomplete and may reject or drop them unintentionally. You should consider writing application-specific custom validation routines for your buffers instead. Some have come the conclusion that using required does more harm than good; they prefer to use only optional. However, this view is not universal.



恐怕唯一的选择是弃用整个结构并创建一个新的结构。

除此之外,实际上存在三个需求度,其中只有两个具有关键字:
  • required:必须在读取时存在,必须在写入时设置
  • optional:可以设置或可以不设置,完全可选
  • “默认”:读取时可能不存在,始终写入(除非它是null指针)

  • 当既未指定 required也未指定 optional时,将隐式应用“默认”要求。

    正如一个人清楚地看到的那样,如果我们看一下事物的兼容性站点,对 required的限制是相当严格的。即使将新的 required字段添加到结构也可能导致不兼容,例如如果新客户端正在从旧服务器读取数据(反之亦然),因为新的 required字段不在旧的impl写入的数据中,而是新的impl期望的数据。

    关于thrift - 如何使必填字段成为可选字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37558302/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com