Golang slice切片映射

记录如何把切片转换为另一个不同结构体的切片

结构体 A:

//大写开头才能在外部包中访问
type UTag struct {
    CreateTime int    `json:"createTime"` //Jsontag 是映射json对应的字段
    TagId      int    `json:"tagId"`
    IsDelete   int    `json:"isDelete"`
    TagName    string `json:"tagName"`
}

type UTags struct {
    Data []UTag `json:"data"`
    Flag bool   `json:"flag"`
}

结构体 B:

type Tag struct {
    ID   int
    Name string
}

功能:把 UTags.Data 转换成 []Tag

func GetTags() (result []model.Tag, err error) {
    //请求服务器获取json
    res, err := http.Get("http://wallpaper.upupoo.com/async/getTags.htm?callback=")
    if err != nil {
        return
    }

    body, err := ioutil.ReadAll(res.Body)
    res.Body.Close()
    if err != nil {
        return
    }

    //多了两个括号需要移除掉
    tmpJson := string(body[1 : len(body)-1])
    // 反序列化
    var temp UTags
    err = json.Unmarshal([]byte(tmpJson), &temp)

    // UTags转换成标准Tags
    for _, v := range temp.Data {
        result = append(result, model.Tag{ID: v.TagId, Name: v.TagName})
    }
    return
}

这是我开发 解析第三方壁纸服务 中的代码,记录一下 Golang 的自学过程,也希望帮到和我遇到一样问题的人。