2017-01-12 8 views
0

私はドライバーの構造体の中にJSONファイルを読むためにこの機能を持っている:汎化 - golang

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 
} 

はどのようにしても、パイロット構造体で動作するように、この機能を変更できますか? 私は[] interface {}を使って成功しなかった。

ありがとうございました

+0

Driver、Pilot、drivers.json、whatever_pilots_is.jsonの定義は何ですか? –

答えて

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 
} 
+1

getDriversOrPilots()から戻り値の型を削除するのを忘れました。 – neclepsio

+0

@neclepsioそれを指摘してくれてありがとう! –