gpt4 book ai didi

thrift - Thrift 参数编号的目的是什么?

转载 作者:行者123 更新时间:2023-12-03 00:29:39 30 4
gpt4 key购买 nike

每个参数(字段标识符)之前的数字的用途是什么?为什么从 5 跳到 16?

struct Tweet {
1: required i32 userId;
2: required string userName;
3: required string text;
4: optional Location loc;
5: optional TweetType tweetType = TweetType.TWEET;
16: optional string language = "english";
}

(摘自 http://diwakergupta.github.io/thrift-missing-guide/ )

我一段时间以来一直在尝试寻找这个问题的答案,但在文档中没有找到任何内容。

最佳答案

这就是所谓的字段 ID,一个 16 位(有符号)整数。除了数据本身之外,这是唯一通过网络允许对方正确识别数据所属字段的东西。

在早期,系统会在内部自动提供这些 ID,这会导致不兼容:如果有人更改了字段的顺序、在其他字段之间添加了字段或删除了字段。出于兼容性原因,您仍然可以省略数字并让系统自动分配负 ID1):

struct yeolde {
i32 foo
string bar
}

但现在你会得到一个关于它的警告:

$ thrift -gen csharp test.thrift
[WARNING:test.thrift:3] No field key specified for foo, resulting protocol may have conflicts or not be backwards compatible!
[WARNING:test.thrift:4] No field key specified for bar, resulting protocol may have conflicts or not be backwards compatible!

Why does it jump from 5 to 16?

人们可能认为这是一个好主意。除了数字必须是正 32 位值 > 0 之外,没有太多限制。

或者同时有一些字段已被删除。特别是对于后一种情况,建议注释掉过时的字段,但将它们保留在 IDL 中,以防止兼容性事故,因为有人“重复使用”已使用且过时的旧字段编号用于新目的。

<小时/>

1)这就是不允许使用负 ID 号的原因。

关于thrift - Thrift 参数编号的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32707779/

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