在运行时使用反射创建切片实例



我试图传递结构片,即[]carDetail[]bikeDetailfunc fetch(url string, itemList []IMapping) (error)中实现IMapping接口。但后来遇到了这个链接。GoLang不支持它。因此,将签名更改为func fetch(url string, itemList IMapping) (error)。现在,我正在尝试在函数和fetch函数中传递carDetailbikeDetail结构,尝试使用反射创建结构切片。那么,我该怎么做呢?可以在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以接受接口{}参数:

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)
.....
}

使用指向相应类型的切片的指针调用它:

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

通过这种方法,json。Umarshal 功能可以完成所有繁重的工作。

最新更新