go - 使用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
谁能帮我解释为什么以及如何编写这个通用代码来提取数据类型?
解决方案
推荐阅读
- java - 在Java中一次比较两个字符串一个字符
- jinja2 - 如何将 Jinja2 列表中的字符串与另一个字符串进行比较?
- pyspark - rdd在pyspark数据框中是什么意思
- google-compute-engine - Compute Engine 自动恢复防火墙 http/https 规则
- python - 如何遍历python的svg元素
- node.js - 从默认路由获取参数
- python-3.x - 删除数据图中的空格
- c++ - CUDA 全局函数未为某些索引正确添加数组值
- ruby-on-rails - 如何在同一控制器中保存 2 个模型的记录?
- java - TestNG 并行数据提供者