这是一个场景:您正在 golang 中实现一个通用组件,它可以与任何类型的原型消息(二进制序列化)一起使用,并且需要在编译时不知道其类型的情况下反序列化二进制原型数据。例如,我在编写通用的 kafka json 归档程序时遇到了这个问题,该组件将:从配置中接收消息类型(字符串)和 kafka 主题的名称需要在运行时创建二进制 -> 内存解串器和内存 -> json 序列化器。你如何从消息名称中获得二进制字节的反序列化器?
1 回答
料青山看我应如是
TA贡献1772条经验 获得超8个赞
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
}
- 1 回答
- 0 关注
- 130 浏览
添加回答
举报
0/150
提交
取消