我正在尝试在客户端和服务之间共享一个大型字典/地图。我需要能够双向设置值,并从字典/地图中删除值,而无需每次都来回传递整个地图。
我知道我可以使用以下方法创建地图:
map<string, CustomType> cells = 3;
我在这里看到使用oneof的建议: https ://github.com/google/protobuf/issues/1606
但是,该错误报告中建议的语法对我来说没有意义:
message Test1 {
oneof a_oneof {
int32 a = 1;
}
}
我将如何测试?我将如何存储无?
我会尝试创建类似的东西:
message None{}
message MaybeCustomType{
oneof maybe{
CustomType just = 1;
None none = 2;
}
}
但我根本不相信这是优雅而正确的解决方案。
我也考虑过完全改变我的模式并做。
map<string, CustomType> cells = 1;
repeated string deleted_cells = 2;
但是我不喜欢那个解决方案,因为它会创建一个未定义的案例。如果一个名为“foo”的单元格同时出现在“cells”映射和“deleted_cells”映射中,会发生什么?此外,它将数据从计算中抽象出来。我希望能够将一个单元格传递给一个修改并可能决定删除单元格的函数,因此对我来说,关于单元格删除的信息存储在单元格本身附近似乎很自然。