如何从xxx.pb.go获取服务描述

如何从xxx.pb.go获取服务描述,go,protocol-buffers,grpc,Go,Protocol Buffers,Grpc,当我使用xxx.proto生成golang protobuf文件时 我明白了 如何从该软件包中获取serviceDesc 我想获取服务名称和方法访问服务和方法的唯一方法是通过proto文件的文件描述符proto。或者,v2protoapi包含一个变量,如果您不知道文件名,该变量将包含描述符proto(请注意,单个proto包可能包含多个文件) 有关此主题的更多讨论,请参阅(特别是dsnet关于v2 proto API在这方面如何工作的最后一条评论)。似乎您应该在服务上使用,以获取从名称到Serv

当我使用xxx.proto生成golang protobuf文件时
我明白了

如何从该软件包中获取
serviceDesc

我想获取服务名称和方法

访问服务和方法的唯一方法是通过proto文件的
文件描述符proto
。或者,v2protoapi包含一个变量,如果您不知道文件名,该变量将包含描述符proto(请注意,单个proto包可能包含多个文件)


有关此主题的更多讨论,请参阅(特别是dsnet关于v2 proto API在这方面如何工作的最后一条评论)。

似乎您应该在服务上使用,以获取从名称到
ServiceInfo
实例的映射。这在注册后使用,我想要的是:如果xxx.pb.go包是“test”,我想使用测试。_Auth_serviceDesc.ServiceName要找到已定义的服务,而不是写入字符串您需要让测试注册服务(以便您可以检索它),或者,在同一个包中,以便您可以访问未导出的名称
_Auth_serviceDesc
...

var _Auth_serviceDesc = grpc.ServiceDesc{
    ServiceName: "protobuf.Auth",
    HandlerType: (*AuthServer)(nil),
    Methods: []grpc.MethodDesc{
        {
            MethodName: "GenerateToken",
            Handler:    _Auth_GenerateToken_Handler,
        },
    },
    Streams:  []grpc.StreamDesc{},
    Metadata: "auth.proto",
}