我想为从生产者解析的任何原始数据类型编写通用解码代码。
生产者使用以下代码对数据进行编码:
// GetBytesFromInterface is the function to convert a interface to bytes
func GetBytesFromInterface(data interface{}) ([]byte, error) {
var buf bytes.Buffer
enc := gob.NewEncoder(&buf)
err := enc.Encode(data)
if err != nil {
return nil, err
}
return buf.Bytes(), nil
}
在客户端,我需要查询元数据表以获取数据类型,然后进行相应的解码,下面是我的代码:
var decodedValueInterface interface{}
err = encodingParser.GetInterfaceFromBytes(encodedTime, &decodedValueInterface)
if err != nil {
fmt.Println("decodedValue can not be assigned: ", err)
}
fmt.Println("decodedValue is ", decodedValueInterface.(time.Time)) // here is just an example assuming the previous encoded data type is time.Time
在这种情况下,我已经收到错误消息,要么是 Interface is nil 要么
gob: local interface type *interface {} can only be decoded from remote interface type; received concrete type Time
谁能帮我解释为什么以及如何编写这个通用代码来提取数据类型?