我正在尝试创建一个可以接受键字符串和对象引用的泛型函数。
该函数读取键的内容,该内容是相同类型的原始对象中的序列化字节数组,它应该将该序列化(反序列化)分配给相同类型的空结构。该函数希望是通用的,因此它可以序列化类型A以及B或[] C
这是我尝试做的事情:
func GetObject(key string, thing interface{}) error {
var buf bytes.Buffer
dec := gob.NewDecoder(&buf)
err := dec.Decode(thing)
if err != nil {
log.Errorf(cs.ctx, "cloud store - GetObject - decode error:", err)
return err
}
return nil
}
这是我尝试调用上述函数的方法:
newThing := MyStruct{}
err := GetObject("a123", &newThing)
关于导致运行时错误的最后几行:
decode error:%!(EXTRA *errors.errorString=EOF)
问题:
答案 0 :(得分:1)
接口的概念是正确的。问题与持久性存储中缺少getter以及如何从其[]字节内容创建缓冲区有关:
func GetObject(key string, thing interface{}) error {
content, _ := SomePersistanceStoreGet(fileName)
buffer := bytes.NewBuffer(content)
dec := gob.NewDecoder(buffer)
err := dec.Decode(thing)
if err != nil {
log.Errorf("decode error: %v", err)
return err
}
return nil
}