我正在使用Instagram API编写应用程序。
我收到JSON请求,并且将Unmarshal'放入嵌套结构中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// the nested structs
type ResponseData struct {
    ID   string `json:"id"`
    Link string `json:"link"`
    Type string `json:"type"`
    User struct {
        FullName       string `json:"full_name"`
        ID             int    `json:"id"`
        ProfilePicture string `json:"profile_picture"`
        Username       string `json:"username"`
    }
    Images struct {
        Standard_Resolution struct {
            URL string `json:"url"`
        }
    }
}

对于要添加的图像URL,它需要在Standard_Resolution中带有下划线,我使用的是Atom的Go Plus软件包,并且出现了绒毛警告:

don't use underscores in Go names; struct field Standard_Resolution
should be StandardResolution

还有另一种方法可以修复错误,但仍在结构中包含值。

更新:

我可以在StandardResolution的最后一个花括号后面添加一个标识符。

1
2
3
StandardResolution struct {
    URL string `json:"url"`
} `json:"standard_resolution"`
  • 我认为您也可以在结构类型上使用标签。 只需通过json:"Standard_Resolution""重命名"您的StandardResolution结构。 Go真的是死常规。 我没有尝试过。
  • 一个最小的工作示例将有助于使用普通编译器进行调试。 我的golang.org语言规范说golang.org/ref/spec#IdentifierList下划线是标识符的有效部分
  • 但是添加json:"Standard_Resolution"也应该有所帮助,并且应该使事情更清楚。
  • 我没有意识到我可以通过在花括号后面添加json:"Standard_Resolution"重命名我的结构,我在单词struct之后添加它,因此出现错误。 谢谢@volker @ikrabbe
  • 您意识到,如果转换为非嵌套的结构定义,如下面我试图回答的那样。
  • @ikrabbe"无下划线"问题是go vet(Go Plus将运行)的样式建议,而不是"破坏OPs程序"问题。

无论如何,如果您不使用嵌套结构,则更易于阅读。

1
2
3
4
5
6
7
8
9
10
type RDUser struct { ... }
type RDStandardResolution struct { ... }
type RDImages struct {
    StandardResolition RDStandardResolution `json:"standard_resolution"`
}
type ResponseData struct {
    ...
    User RDUser `json:"user"`
    Images RDImages `json:"images"`
}