结构的泛化 - golang

时间:2017-01-12 12:12:14

标签: json go struct generalization

我有这个函数将JSON文件读入Driver结构:

func getDrivers() []Driver {
    raw, err := ioutil.ReadFile("/home/ubuntu/drivers.json")
    if err != nil {
        fmt.Println(err.Error())
        os.Exit(1)
    }

    var d []Driver
    json.Unmarshal(raw, &d)
    return d
}

如何更改此功能以使用Pilot结构? 我尝试使用[] interface {}但没有成功。

谢谢

1 个答案:

答案 0 :(得分:0)

更改函数的签名以使其成为通用,并将切片作为参数传递。以下应该有效:

func getDriversOrPilots(file string, slice interface{}) {
    raw, err := ioutil.ReadFile(file)
    if err != nil {
        fmt.Println(err.Error())
        os.Exit(1)
    }

    json.Unmarshal(raw, slice)
}

func getDrivers() []Driver {
    var d []Driver
    getDriversOrPilots("/home/ubuntu/drivers.json", &d)
    return d
}

func getPilots() []Pilot {
    var p []Pilot
    getDriversOrPilots("/home/ubuntu/pilots.json", &p)
    return p
}