如何使用 golang 在编译时不知道其类型的情况下解析 protobuf3 消息?

这是一个场景:

您正在 golang 中实现一个通用组件,它可以与任何类型的原型消息(二进制序列化)一起使用,并且需要在编译时不知道其类型的情况下反序列化二进制原型数据。

例如,我在编写通用的 kafka json 归档程序时遇到了这个问题,该组件将:

  • 从配置中接收消息类型(字符串)和 kafka 主题的名称

  • 需要在运行时创建二进制 -> 内存解串器和内存 -> json 序列化器。

你如何从消息名称中获得二进制字节的反序列化器?


互换的青春
浏览 138回答 1
1回答

料青山看我应如是

golang 原型库有一个用于此目的的辅助实用程序:// MessageType returns the message type (pointer to struct) for a named message.// The type is not guaranteed to implement proto.Message if the name refers to a// map entry.func MessageType(name string) reflect.Type {   // ....}要使用它,您可以使用类似于此的方法:func getProto(messageType string, messageBytes []byte) proto.Message {    pbtype := proto.MessageType(messageType)    msg := reflect.New(pbtype.Elem()).Interface().(proto.Message)    proto.Unmarshal(messageBytes, msg)    return msg}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go