删除 protobuf 中的字段

Sar*_*ram 8 protocol-buffers proto grpc

我有一个这样的 protobuf 消息:

message MyMessage{
    string foo = 1;
    int toBeRemovedBar = 2 [deprecated = true];
    string zag = 3;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 保留字段编号或名称
  • 保留字段编号和名称

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

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

message MyMessage{
    string foo = 1;

    reserved 2;
    reserved "toBeRemovedBar";

    string zag = 3;
}
Run Code Online (Sandbox Code Playgroud)

Dou*_*ley 10

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