gpt4 book ai didi

Go函数接受不同的数组参数

转载 作者:数据小太阳 更新时间:2023-10-29 03:46:57 25 4
gpt4 key购买 nike

我想使用一个通用函数来解码不同的类型:

type Foo struct {
Name string
Another string
}

type Bar struct {
Name string
Some string
}

func unmarshal(data []byte, val *[]map[string]interface{}) {
err := json.Unmarshal(data, val)

if err != nil || (*val)[0]["Name"] == "" {
*val = nil
}
}

func main() {
var foos []Foo
var bars []Bar

// fooData and barData are JSON strings retrieved from database
unmarshal(fooData, &foos)
unmarshal(barData, &bars)
}

我收到一个错误,如 cannot use &foo (type *[]Foo) as type *[]map[string]interface {} in argument to unmarshal

我试过使用 val interface{} 作为参数,但它不支持索引。

那我怎样才能达到目标呢?谢谢。

最佳答案

要使用任意 slice 类型,请将参数声明为 interface{} 类型并使用 reflection访问值:

func unmarshal(data []byte, v interface{}) {
err := json.Unmarshal(data, v)
rv := reflect.ValueOf(v).Elem()

if err != nil || rv.Len() == 0 || rv.Index(0).FieldByName("Name").Interface() == "" {
rv.Set(reflect.Zero(rv.Type()))
}
}

关于Go函数接受不同的数组参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56044702/

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