首页 > 解决方案 > 使用gob在Golang中进行通用数据解码,无法从通用接口中获取价值

问题描述

我想为从生产者解析的任何原始数据类型编写通用解码代码。

生产者使用以下代码对数据进行编码:

// 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

谁能帮我解释为什么以及如何编写这个通用代码来提取数据类型?

标签: gogeneric-programminggob

解决方案


推荐阅读