关于描述符和反射的protobuf问题

a protobuf problem about descriptor and reflection

我有问题。我想非常频繁地使用 FieldDescriptor,所以我想保存 FieldDescriptor 地址,而不是每次都调用 FindFieldByName。

我发现相同的 protobuf 对象会共享相同的元数据,它们具有相同的 FileDescriptor 对象和 FieldDescriptor 对象。

可以吗?

enter image description here

是的,这是安全的(除非你正在做一些时髦的事情)。

使用 protoc 生成的接口时,可以安全地将描述符视为永久全局变量,跨消息共享。

当你处理来自其他来源的描述符时,这是另一回事,例如 gRPC 的反射服务。即使那样,所涉及的生命周期通常也很简单。