Structs {.en}

结构体 {.zh}

::: {.en} Go’s structs are typed collections of fields. They’re useful for grouping data together to form records. :::

::: {.zh}

Go 的结构体是带类型的字段集合。这在组织数据时非常有用。

:::

  1. package main
  2. import "fmt"

::: {.en} This person struct type has name and age fields. :::

::: {.zh}

这个 person 结构体有nameage字段。

:::

  1. type person struct {
  2. name string
  3. age int
  4. }
  5. func main() {

::: {.en} This syntax creates a new struct. :::

::: {.zh}

此语法创建一个新结构体元素。

:::

  1. fmt.Println(person{"Bob", 20})

::: {.en} You can name the fields when initializing a struct. :::

::: {.zh}

您可以在初始化结构体元素时指定字段名字。

:::

  1. fmt.Println(person{name: "Alice", age: 30})

::: {.en} Omitted fields will be zero-valued. :::

::: {.zh}

省略的字段将被初始化为零值。

:::

  1. fmt.Println(person{name: "Fred"})

::: {.en} An & prefix yields a pointer to the struct. :::

::: {.zh}

& 前缀生成指向结构体的指针。

:::

  1. fmt.Println(&person{name: "Ann", age: 40})

::: {.en} Access struct fields with a dot. :::

::: {.zh}

使用点(.)访问结构体字段。

:::

  1. s := person{name: "Sean", age: 50}
  2. fmt.Println(s.name)

::: {.en} You can also use dots with struct pointers - the pointers are automatically dereferenced. :::

::: {.zh}

也可以对结构体指针使用 . - 指针会被自动解引用。

:::

  1. sp := &s
  2. fmt.Println(sp.age)

::: {.en} Structs are mutable. :::

::: {.zh}

结构体是可变(mutable)的。

:::

  1. sp.age = 51
  2. fmt.Println(sp.age)
  3. }
  1. $ go run structs.go
  2. {Bob 20}
  3. {Alice 30}
  4. {Fred 0}
  5. &{Ann 40}
  6. Sean
  7. 50
  8. 51