这篇文章描述了原始文件中编号标签的用途,在序列化和反序列化数据时基本上匹配字段。我的问题是:如果我更改现有字段的编号会发生什么?
举同样的例子,假设这是原始数据
message SearchRequest {
required string query = 1;
// Pagination fields
optional int32 page_number = 2;
optional int32 result_per_page = 3;
}
我想添加一个新字段,在分页字段之前添加这个字段在逻辑上是有意义的-如果我还没有使用页码
和
每页结果
字段(尽管消息类型
搜索请求
正在使用),我可以按如下方式重新枚举字段吗?
message SearchRequest {
required string query = 1;
optional int32 new_data = 2;
// Pagination fields
optional int32 page_number = 3;
optional int32 result_per_page = 4;
}
我是否应该从一开始就给分页字段更大的数字,以允许新字段?
留档说
这些字段编号用于标识消息二进制格式中的字段,并且在使用消息类型后不应更改。
更改字段编号几乎总是一个坏主意——除非所有客户端和服务器同时are.deployed,并且任何地方(文件、数据库等)都没有持久的有效负载数据,否则您会得到非常奇怪的行为。特别是,序列化程序会尝试将数据解释为不同的东西:在某些情况下,这会导致序列化失败,在其他情况下,它会默默地愉快地反序列化具有垃圾含义的数据,从而导致混乱。
没有理由不简单地使用字段5。
我有这样一个gRPC API定义(来自Akka docs示例),但要长得多(4000行,仅是服务部分)。 然而,RPC列表现在变得太长了,我想以某种方式将其“分解”为多个文件,以便文件更具可读性。像这样的 即使只是在不同的文件中分别定义RPC,然后编写类似的内容也会对我有所帮助: 是否有可能在gRPC协议定义中以某种方式“组合”服务?
我可以使用PHP以编程方式更改文件的路径吗? 例如,更改
问题内容: 我有一个计划用于废料堆的旧可执行文件,但是还不存在。它依赖于已经从我的环境中删除的一些库,但是我在某些可以正常工作的地方有一些存根库。我想将此可执行文件指向这些存根库。是的,我可以设置LD_LIBRARY_PATH,但是许多脚本都调用了此可执行文件,许多用户也希望将其修复在一处。 我没有这个来源,很难得到它。我在想- 是否可以使用支持ELF的编辑器编辑此文件,并向rpath添加一个简单
如何使用JavaScript更改标记的属性? 起初,我有一个默认的src是“../template/edit.png”,我想用“../template/save.png”onclick更改它。 更新:这里是我的html onclick: 和我的JS 我试着在edit()中插入它,它可以工作,但需要单击图像两次
假设我有一条消息 并且我想将更改为。我真的必须更改数字吗?(例如为4和不建议使用3)。 我和一个朋友正在讨论这个问题。他在Protobuff方面更有经验(我是新手),但从我阅读的文档来看,我实际上不明白为什么有必要这样做。 虽然这些文件没有直接解决我所看到的问题,但我的理由如下: 上述内容可能会序列化为 反序列化基本上可以理解为 哦,好的,那是1,所以读取接下来的32位 哦,好的,那是3,所以把接
例如,如果我从以下更改: 到 将foo从1更改为2安全吗?文档说不要:<代码>这些数字用于标识消息二进制格式中的字段,并且在使用消息类型时不应更改 ,但我想知道为什么。