如何检查嵌套结构中是否存在键

时间:2016-11-03 18:43:58

标签: go struct properties

我有以下结构

   type GiphyJson struct {
        Type string `json:"type"`
        Data []struct {
            Images struct {
                Fixed_height struct {
                    Url string `json:"url"`
                } `json:"fixed_height"`
            } `json:"images"`
        } `json:"data"`
    }

我需要访问Data[x].Images.Fixed_height.Url。理想情况下,我希望能够检查每个属性'数据,图像,固定高度'是否存在。在访问Url之前,确保我没有nil指针异常。由于我对这种语言比较陌生,我很好奇这样做的惯用方法是什么。

以下是我如何使用结构。

var err error
var giphyJson GiphyJson
keyword = url.QueryEscape(keyword)
resp, err := http.Get("http://api.giphy.com/v1/gifs/search?q=" + keyword + "&api_key=dc6zaTOxFJmzC&limit=100")
if err != nil {
    err = errors.New("An error occured trying to contact giphy")
    return "", err
}
defer resp.Body.Close()
bodyBytes, err := ioutil.ReadAll(resp.Body)
err = json.Unmarshal(bodyBytes, &giphyJson)

1 个答案:

答案 0 :(得分:2)

唯一需要的检查(基于该结构的定义)是len(Data) > x。除此之外,一切都是一种价值类型,因此没有发生零参考恐慌的风险。

if len(Data) > x {
    // access
    fmt.Println(Data[x].Images.Fixed_height.Url)
} else {
   // do other stuff you to mitigate unexpected input
}