Golang struct {} {}意思

Jie*_*eng 2 go

我正在查看chi包的文档.我看到类似的东西:

https://github.com/pressly/chi/blob/master/_examples/rest/main.go#L154

data := struct {
    *Article
    OmitID interface{} `json:"id,omitempty"` // prevents 'id' from being overridden
}{Article: article}
Run Code Online (Sandbox Code Playgroud)

我怎么解释这个?2部分我不太了解

  • OmitID部件如何防止id被设置?
  • {Article: article}部分做什么?

Guj*_*ana 6

所述第一{}struct定义为定义结构的字段或属性.

data := struct {
    *Article
    OmitID interface{} `json:"id,omitempty"` // prevents 'id' from being overridden
}
Run Code Online (Sandbox Code Playgroud)

所以这data是一个具有字段*ArticleOmitID受尊重类型的结构.

{Article:article}部分做了什么?

第二个{}是定义该字段的值.

{Article: article}
Run Code Online (Sandbox Code Playgroud)

这部分是定义Article字段的价值.

OmitID部分如何防止id被设置?

在go中,您可以在结构中定义任意数量的字段.您可以通过调用字段和具有受尊重类型的值来调用它来定义它.例如,如果我有这个结构:

type DriverData struct {
    Name     string  `json:"name"`
    Status   bool    `json:"status"`
    Location GeoJson `json:"location"`
}
Run Code Online (Sandbox Code Playgroud)

我可以这样称呼它:

example := DriverData{Name : "SampleName"}
Run Code Online (Sandbox Code Playgroud)

该字段的其余部分将zero values基于其各自的数据类型.

你可以在这里阅读golangZero Values

  • 答案的最后一行有一些不准确之处.未声明的字段将具有"零值"("nil"和"零值"不相同).https://tour.golang.org/basics/12 (2认同)