在Protobuf v2中使用地图

Slagathor

目前,我在项目中使用protobuf版本2。到目前为止,所有消息都运行良好。但是我遇到了尝试使用“地图”关键字的障碍。

需要该映射背后的TLDR用法是,我想将一些JSON键/值对传递给我的服务器以进行查找,并将可能的数据日志传递给服务器(使用JSON消息接口)。

我目前正在使用文档页面上推荐的向后兼容方法:https : //developers.google.com/protocol-buffers/docs/proto#maps

我想了解的是,为什么以下消息声明(使用映射)无法编译?我正在使用以下protoc编译器的版本:'#protoc --version => libprotoc 2.6.1'

message MapFieldEntry {
  optional string key = 1;
  optional string value = 2;
}

message Lookup {
  repeated MapFieldEntry map_field = 1;
  map<string, string> test_map = 2;
}

我收到的错误如下(考虑到地图要素的文档,这些错误对我来说没有意义):

Expected "required", "optional", or "repeated".
Expected field name.

我尝试添加语法=“ proto2”; 在顶部,但仍然出现错误。

编辑:只是一个注释;我遇到的问题与Lookup消息的第二个参数有关。第一个参数是我目前正在使用的解决方法。

卢克

我在git上发现了其他有类似问题的人:https : //github.com/google/protobuf/issues/799

响应为:

从v3.0.0开始仅支持maps语法。文档中的“ proto2”是指语法版本,而不是protobuf发行版本。v3.0.0支持proto2语法和proto3语法,而v2.6.1仅支持proto2语法。对于所有用户,建议使用v3.0.0-beta-1而不是v2.6.1。

因此,看来要解决您的问题,应使用协议3,而不是2.6.1。

并将您syntax=proto2放在文件顶部,以确保这是您使用的proto2语法。

您可以尝试让我知道是否可行?这是一个有趣的问题,因为官方文档没有提及。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章