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() { fmt.Println("嗨客网(www.haicoder.net)") type Person struct { Name string Age int } type Student struct { P Person Score float64 } //定义一个结构体嵌套,使用列表初始化 stu := Student{ Person{ "HaiCoder", 20, }, 60, } fmt.Println("Student =", stu) }

程序运行后,控制台输出如下:

13_golang结构体嵌套.png

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

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

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

结构体嵌套定义初始化

定义一个结构体嵌套,使用键值对初始化

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

程序运行后,控制台输出如下:

14_golang结构体嵌套.png

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

结构体嵌套定义初始化

定义一个结构体嵌套,使用键值初始化指定字段

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

程序运行后,控制台输出如下:

15_golang结构体嵌套.png

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

Go语言结构体嵌套总结

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

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