我可以从 protobuf 消息中删除一个字段吗?

Can I delete a field from a protobuf message?

我正在客户端和从服务器接收消息的服务器之间实施策略执行点,如果客户端没有足够的权限查看消息的某些部分,则会在发送之前删除这些部分给客户。

message {
  string not_sensitive = 1;
  optional string sensitive = 2;
}

伪代码

from_server >> my_msg;
if (!authorized) {
  my_msg.delete("sensitive");
}
to_client << my_msg;

是的。

据我了解当前的 v3 pb 模式语言,所有字段都是可选的。但无论如何,在 v2 中标记为可选的字段是不需要存在的。因此,将您的伪代码扩展为 C++(参见 here),可以看到生成的 class 将以 has_sensitive() 方法和 clear_sensitive() 方法结束。调用后者然后序列化对象将导致省略 sensitive 字段的有线格式数据。