Go 在运行时使用反射创建切片实例
我试图传递结构的切片,即【】carDetail或【】bikeDetail,它们在func fetchurl字符串itemList[]IMapping error中实现IMapping接口。但后来遇到了这个。戈朗不支持。因此,将签名更改为func fetchurl字符串,itemList IMapping错误。现在,我尝试在函数中传递carDetail或bikeDetail结构,在fetch函数中尝试使用反射创建结构的切片。那么,我该怎么做呢?可以在json.Unmarshal方法中进一步传递,以将json映射到structGo 在运行时使用反射创建切片实例,go,reflection,Go,Reflection,我试图传递结构的切片,即【】carDetail或【】bikeDetail,它们在func fetchurl字符串itemList[]IMapping error中实现IMapping接口。但后来遇到了这个。戈朗不支持。因此,将签名更改为func fetchurl字符串,itemList IMapping错误。现在,我尝试在函数中传递carDetail或bikeDetail结构,在fetch函数中尝试使用反射创建结构的切片。那么,我该怎么做呢?可以在json.Unmarshal方法中进一步传递,以
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函数完成了所有繁重的工作。您可以不使用接口直接使用struct,并在fetch函数中创建struct片段,以解组可能重复的数据