gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:14:45 26 4
gpt4 key购买 nike

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

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

问题:

  • 接口(interface)方法是否适合此目的(允许通用地使用该函数)?
  • 序列化错误(使用 Gob)似乎有问题。关于如何纠正的任何建议?

最佳答案

接口(interface)的概念是正确的。该问题与持久性存储中缺少的 getter 以及如何从其 []byte 内容创建缓冲区有关:

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
}

关于go - 使用泛型类型参数在 Go 中创建函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36429554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com