Protocol buffers 在protobuf v2中使用映射

Protocol buffers 在protobuf v2中使用映射,protocol-buffers,Protocol Buffers,目前我在我的项目中使用protobuf版本2。到目前为止,所有的信息都非常有效;然而,我在尝试使用“地图”关键字时遇到了一个障碍 需要映射背后的TLDR用法是,我希望将一些JSON键/值对传递给我的服务器以进行查找,并将可能的数据日志传递给服务器(使用JSON消息接口) 我目前正在使用文档页面上推荐的向后兼容方法: 我想了解的是,为什么我的消息的以下声明(使用映射)无法编译?我正在使用protoc编译器的以下版本:“#protoc--version=>libprotoc 2.6.1” messa

目前我在我的项目中使用protobuf版本2。到目前为止,所有的信息都非常有效;然而,我在尝试使用“地图”关键字时遇到了一个障碍

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

我目前正在使用文档页面上推荐的向后兼容方法:

我想了解的是,为什么我的消息的以下声明(使用映射)无法编译?我正在使用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;
}
我尝试添加syntax=“proto2”;在顶部,但我仍然得到错误

编辑:
就像一张纸条;我遇到的问题是关于查找消息的第二个参数。第一个参数是我目前正在使用的解决方法。

我发现其他人在git上也有类似问题:

答复是:

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

看来要解决您的问题,您应该使用Protoc3,而不是2.6.1

并将您的
syntax=proto2
放在文件的顶部,精确地说,这就是您使用的proto2语法


你能试着让我知道这是否有效吗?这是一个有趣的问题,因为官方文件没有提到它。

谢谢链接;很高兴我不是唯一一个误解protobuf 2文档的人。我想我现在会坚持使用向后兼容版本。
Expected "required", "optional", or "repeated".
Expected field name.