返回类型与struct golang相同

时间:2016-04-04 00:34:55

标签: pointers go struct

我有一个结构:

type Race struct {
    Name    string `json:"Name"`
    About   string `json:"About"`
    Health  int    `json:"Health"`
    Attacks []Move `json:"Attacks"`
}

和一个加载结构的函数:

func LoadClass(path string) *Race {
    bytes, err := ioutil.ReadFile(path)
    if err != nil {
        panic(err)
    }
    jsonClass := &Race{}
    err = json.Unmarshal(bytes, jsonClass)
    //decodes it
    if err != nil {
        panic(err)
    }
    return jsonClass
}

有没有办法让jsonClass类型为Race,而不是*Race

2 个答案:

答案 0 :(得分:1)

您可以将指向变量的指针传递给Unmarshal,然后只返回变量。

func LoadClass(path string) (race Race) {
    bytes, err := ioutil.ReadFile(path)
    if err != nil {
        panic(err)
    }
    if err = json.Unmarshal(bytes, &race); err != nil {
        panic(err)
    }
    return
}

答案 1 :(得分:0)

是的,只需返回Race而不是*Race的值:

func LoadClass(path string) Race {

    // read file to []byte

    jsonClass := new(Race)
    _ = json.Unmarshal(bytes, jsonClass)

    // return the value jsonClass points to
    return *jsonClass
}