gpt4 book ai didi

go - 在运行时使用反射创建 slice 实例

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

我试图传递结构片段,即 []carDetail[]bikeDetail,它们在 中实现了 IMapping 接口(interface)>func fetch(url string, itemList []IMapping)(错误)。但后来遇到了这个 link . Go 语言不支持它。因此,将签名更改为 func fetch(url string, itemList IMapping) (error)。现在,我试图在函数中传递 carDetailbikeDetail 结构,并在 fetch 函数中尝试使用反射创建结构 slice .那么,我该怎么做呢?进一步可以在 json.Unmarshal 方法中传递以将 json 映射到结构。

type IMapping interface {
GetId() int
}

type carDetail struct {
ModelId int `json:"modelId"`
CarName string `json:"carName"`
}
func (m *carDetail) GetId() int {
return m.ModelID
}

type bikeDetail struct {
ModelId int `json:"modelId"`
BikeName string `json:"bikeName"`
}

func (m *bikeDetail) GetId() int {
return m.ModelID
}

func fetch(url string, itemList IMapping) (error) {

var myClient = &http.Client{}
r, err := myClient.Get(url)
body, err := ioutil.ReadAll(r.Body)
defer r.Body.Close()

// how to create slice at run time using reflection say objVehicle

err = json.Unmarshal(body, &objVehicle)

.....
}

最佳答案

声明 fetch 以获取接口(interface){}参数:

func fetch(url string, itemList interface{}) (error) {
var myClient = &http.Client{}
r, err := myClient.Get(url)
body, err := ioutil.ReadAll(r.Body)
defer r.Body.Close()
err = json.Unmarshal(body, itemList)
.....
}

使用指向适当类型的 slice 的指针调用它:

var details []carDetail
err := fetch(u, &details)

通过这种方法,json.Umarshal 函数会完成所有繁重的工作。

关于go - 在运行时使用反射创建 slice 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50723465/

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