快速协议转换失败,错误“google.type.LatLng”未定义
Posted
技术标签:
【中文标题】快速协议转换失败,错误“google.type.LatLng”未定义【英文标题】:swift protoc conversion fails with error "google.type.LatLng" is not defined 【发布时间】:2020-09-09 09:25:12 【问题描述】:我正在使用命令将 .proto 文件转换为 swift 文件
protoc --swift_out=. my_proto_file.proto
使用的协议版本是libprotoc 3.13.0
。
my_proto_file 有几个 import 语句,例如
import "google/protobuf/duration.proto";
import "google/type/latlng.proto";
当我在这个 proto 文件上运行 protoc 时,会出现类似的错误
trackProto.proto:8:1: Import "google/type/latlng.proto" was not found or had errors.
trackProto.proto:153:3: "google.type.LatLng" is not defined.
trackProto.proto:169:3: "google.type.LatLng" is not defined.
trackProto.proto:174:3: "google.type.LatLng" is not defined.
我相信依赖于 google/type repo。这些不是众所周知的类型,例如google.protobuf.Any
、google.protobuf.Api
等,因此 protoc 无法找到依赖项,因此无法生成 .swift 文件
如何解决这种依赖关系?
【问题讨论】:
【参考方案1】:我从https://github.com/googleapis/googleapis/blob/master/google/type/latlng.proto 下载了 google/type/latlong.proto 并将其放在本地文件夹中,例如C:\grpc_includes。我重复了我需要导入的其他原型,例如谷歌/protobuf/timestamp.proto。我匹配了路径指示的文件夹结构,例如C:\grpc_includes\google\type\latlong.proto。
然后我在我的 protoc 命令行中添加了 --path_proto=<path to my .proto> --path_proto=C:\grpc_includes
。 -I=<path to my .proto> -I=C:\grpc_includes
也可以。
这允许 protoc 找到导入。要使用导入的结果类型,我需要包含命名空间,例如google.type.LatLng 和 google.protobuf.Timestamp 在我的 .proto 文件中使用它们时。
这里有一些有用的信息可以引导我找到解决方案:https://developers.google.com/protocol-buffers/docs/proto?csw=1#generating 和这里:https://developers.google.com/protocol-buffers/docs/proto3#importing_definitions
【讨论】:
以上是关于快速协议转换失败,错误“google.type.LatLng”未定义的主要内容,如果未能解决你的问题,请参考以下文章
我们可以在没有强制转换的情况下快速测试符合相同协议的对象是不是相同?