旺仔小糖

golang struct 类型 2 years ago

go
2887个字符
共有98人围观

1. 匿名结构体

Go 语言 中 结构体 支持匿名结构体,匿名结构体没有 类型 名称,无须通过 type 关键字定义就可以直接使用。

语法
s := struct {
    // 匿名结构体字段定义
    Field1 Field1Type
    Field2 Field2Type
    …
}{
    // 字段值初始化
    Field1: Value1,
    Field2: Value2,
    …
}

说明:定义一个匿名结构体,该结构体有两个字段,字段名分别为 Field1 和 Field2,字段类型为 Field1Type 和 Field2Type。

接着,我们直接初始化字段,将 Filed1 字段的值设置为 Value1,将 Field2 的字段的值设置为 Value2。

实例

定义一个匿名结构体,并初始化

package main

import (
  "fmt"
)

func main() {
  //定义一个匿名结构体,并初始化
  stu := struct{
    Name string
    Age int
    Score float64
  }{
    "SCOTT",
    18,
    99.5,
  }
  fmt.Println("Student =", stu)
}

运行:

2. 结构体嵌套

Go 语言 中 结构体 支持结构体嵌套,即一个结构体里可以存放另一个结构体。嵌套结构初始化时,也支持列表初始化的方式和键值对初始化的方式。

语法
s := struct {
    // 结构体嵌套字段定义
    Field1 Field1Type
    Field2 StructType
    …
}{
    // 字段值初始化
    Field1: Value1,
    Field2: Value2,
    …
}

说明:定义一个结构体嵌套,该结构体有两个字段,字段名分别为 Field1 和 Field2,字段类型为 Field1Type 和 StructType。

接着,我们直接初始化字段,将 Filed1 字段的值设置为 Value1,将 Field2 的字段的值设置为 Value2。其中,Field2 的字段类型为 StructType,即是一个结构体类型。

package main

import (
  "fmt"
)

func main() {

  type Person struct {
    Name string
    Age  int
  }
  type Student struct {
    P     Person
    Score float64
  }
  //定义一个结构体嵌套,使用列表初始化
  stu := Student{
    Person{
      "scott",
      20,
    },
    60,
  }
  fmt.Println("Student =", stu)
}

说明:首先,我们定义了一个结构体 Person,该结构体有两个字段,接着再次定义了一个结构体 Student,该结构体有两个字段。

Student 结构体第一个字段类型为 Person,也是一个结构体类型,第二个字段是一个 float64 类型的字段。

接着,我们初始化结构体时,首先初始化 Person 类型的字段,Person 字段有两个字段,分别为 Name 和 Age,接着初始化结构体的 Score 字段。

package main

import (
  "fmt"
)

func main() {
  type Person struct {
    Name string
    Age  int
  }
  type Student struct {
    P     Person
    Score float64
  }
  //定义一个结构体嵌套,使用键值对初始化
  stu := Student{
    P: Person{
      Name: "scott",
      Age:  20,
    },
    Score: 60,
  }
  fmt.Println("Student =", stu)
}

说明:首先,我们定义了一个结构体 Person,该结构体有两个字段,接着再次定义了一个结构体 Student,该结构体有两个字段,接着,我们使用键值对的方式初始化结构体。

package main

import (
  "fmt"
)

func main() {
  type Person struct {
    Name string
    Age  int
  }
  type Student struct {
    P     Person
    Score float64
  }
  //定义一个结构体嵌套,使用键值初始化指定字段
  stu := Student{
    P: Person{
      Name: "scott",
      Age:  20,
    },
  }
  fmt.Println("Student =", stu)
}

说明:首先,我们定义了一个结构体 Person,该结构体有两个字段,接着再次定义了一个结构体 Student,该结构体有两个字段,接着,我们使用键值对的方式初始化结构体 Student 中的 P 字段。

总结

1, Go 语言中结构体支持匿名结构体,匿名结构体没有类型名称,无须通过 type 关键字定义就可以直接使用。匿名结构体定义初始化语法:

s := struct {
    // 匿名结构体字段定义
    Field1 Field1Type
    Field2 Field2Type
    …
}{
    // 字段值初始化
    Field1: Value1,
    Field2: Value2,
    …
}

2, Go 语言中结构体支持结构体嵌套,即一个结构体里可以存放另一个结构体。嵌套结构初始化时,也支持列表初始化的方式和键值对初始化的方式。结构体嵌套定义语法:

s := struct {
    // 结构体嵌套字段定义
    Field1 Field1Type
    Field2 StructType
    …
}{
    // 字段值初始化
    Field1: Value1,
    Field2: Value2,
    …
}