如何在golang中将.proto文件解析为FileDescriptor?

3
我的目标是动态获取.proto文件中的FileDescriptor,我应该如何做?
输入:
syntax = "proto3";

package "halo";

message SearchRequest {
    string query = 1;
    string data = 2;
}

输出:

import  "google.golang.org/protobuf/types/descriptorpb"

descriptorpb.FileDescriptorProto{
    Package: "halo",
    MessageType: []{
        descriptorpb.DescriptorProto{query},
        descriptorpb.DescriptorProto{data},
    }
}
1个回答

2
除非针对您的平台存在特定于平台的运行时/库解析器,否则最简单的方法是使用protoc命令并使用-oFILE / --descriptor_set_out=FILE选项进行解析,该解析会输出一个protobuf负载,即序列化后的FileDescriptorSet内容。您需要在特定的平台上进行反序列化,并取出第一个(通常是唯一的)文件。对于这个反序列化步骤,您通常会使用protoc命令,并将descriptor.proto模式作为输入,以获取该模式的平台/语言特定解析器。
特定于平台的运行时/库解析器并不常见,并且往往在第三方工具中更为常见。Google golang protobuf实现是第一方的,据我所知,在golang中不存在这样的解析器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接