使用泛型类型参数在Go中创建函数

时间:2016-04-05 14:39:52

标签: go

我正在尝试创建一个可以接受键字符串和对象引用的泛型函数。

该函数读取键的内容,该内容是相同类型的原始对象中的序列化字节数组,它应该将该序列化(反序列化)分配给相同类型的空结构。该函数希望是通用的,因此它可以序列化类型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)

问题:

  • 是正确用于此目的的接口方法(允许一般使用该功能)?
  • 序列化错误(使用Gob)似乎有问题。有关如何纠正的建议吗?

1 个答案:

答案 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
}