首页 > 解决方案 > 删除 protobuf 中的字段

问题描述

我有这样的 protobuf 消息:

message MyMessage{
    string foo = 1;
    int toBeRemovedBar = 2 [deprecated = true];
    string zag = 3;
}

toBeRemovedBar属性不再需要,需要删除。根据此处此处的指南,我可以保留字段名称或编号。这里的最佳做法是什么?

保留字段编号只会阻止字段编号的重复使用。无法阻止重复使用字段名称。类似的论点适用于仅保留字段名称。

那么,删除属性的正确方法是保留字段名称和编号,如下所示?

message MyMessage{
    string foo = 1;

    reserved 2;
    reserved "toBeRemovedBar";

    string zag = 3;
}

标签: protocol-buffersgrpcproto

解决方案


您应该保留字段编号。这将防止使用相同的标签添加新字段,这将导致运行旧版本且已编译遗留字段的任何用户的线路不兼容。从线路兼容性的角度来看,重用名称是好的,尽管这样做可能会引起一些混乱。


推荐阅读