我需要简单地直接将几个.proto
文件的内容作为描述符加载,这样我就可以按照https://pkg.go.dev/google.golang.org/protobuf/reflect/protoregistry通过反射操作它们
据我所知,我需要
1.将文件的内容作为字符串加载。
1.使用prototext
将字符串解组为descriptorpb.FileDescriptorProto
1.初始化ProtoFileDescriptor
,
1.最后,我可以在注册表中注册ProtoFileDescriptor。
我真的需要跳过所有这些环节吗,还是我完全错过了另一个API?
2条答案
按热度按时间33qvvth11#
如果有人问这个问题:
字符串
kuuvgm7e2#
我一直在努力寻找一种方法来注册proto文件到protoregistry ,而不需要 * 使用主机上的protoc可执行文件。我在open policy agent中发现了这段代码,它使用bufbuild/protocompile(它将自己描述为“ github.com/jhump/protoreflect/desc/protoparse包的精神继承者 *”):
https://github.com/open-policy-agent/conftest/blob/68e075c067f82f415a070ce019554894a8228cf7/parser/textproto/textproto.go#L101
在我的例子中,我不仅想用protoregistry注册消息和类型,还想设置一个通用的服务处理程序,如gRPC GO Single Generic Service Handler中所描述的,所以我修改了一点开放策略代理代码:
字符串
我的
server struct
也是从上面的通用服务处理程序帖子修改的:型