Protobuf 是通过 GRPC 进行动态 JSON 传输的正确选择吗?
在 GRPC 通信中,可以使用以下方式促进动态 JSON 数据的交换google/protobuf/struct.proto 文件。此文件定义了一个 Struct 消息类型,可以在 Protobuf 结构中表示 JSON 对象。
google/protobuf/struct 的使用
基于您提供的 Protobuf文件中,利用 google.protobuf.Struct 类型是发送动态 JSON 数据的可行方法。此结构允许您将 JSON 对象表示为字符串和值消息的键值对。每个 Value 消息都封装一个 JSON 值,支持字符串、数字、布尔值和嵌套结构等类型。
替代解决方案
使用 google/protobuf/struct 时是一个常见的选择,还有其他替代方法考虑:
Anuj 的解决方案
Anuj 建议从映射构造 structpb.Struct直接使用NewStruct。这种方法简化了转换过程,但需要仔细考虑类型转换,以确保 Go 数据类型在 Value 消息中正确表示。
Luke 的解决方案
Luke 最初进行转换使用 json.Marshal 将 JSON 数据转换为字节,然后使用将其解组回 structpb.Struct protojson.Unmarshal。虽然此方法提供了灵活性,但它涉及可能影响性能的不必要的转换步骤。
建议
考虑类型安全性、简单性和性能,使用 google.protobuf。 proto3 中定义的结构类型是通过 GRPC 发送动态 JSON 数据的可靠方法。官方 structpb 函数提供了一种用户友好且高效的方法来构造和操作这些结构。
以上是我应该使用 Protobuf 的'google.protobuf.Struct”通过 gRPC 进行动态 JSON 传输吗?的详细内容。更多信息请关注PHP中文网其他相关文章!