目前,我在项目中使用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] 删除。
我来说两句