Go语言结构体匿名字段

Go语言结构体匿名字段教程

Go 语言结构体 支持结构体匿名字段,即定义结构体时,只写结构体的 类型,不写结构体的名字。结构体的匿名字段只能用在结构体类型的嵌套中。

如果定义的结构体使用的是匿名字段,那么使用键值对赋值的时候,键的名字默认就是结构体的类型名。

结构体匿名字段定义

语法

type StructName struct { Field1 Field1Type Field2 Field1Type … } type StructName2 struct { Field1 Field1Type StructName … }

说明

首先,定义一个结构体 StructName,接着定义一个结构体 StructName2,StructName2 里面有两个字段,一个为 Field1Type 类型的 Field1,一个为 StructName 类型的匿名字段。

案例

结构体匿名字段定义初始化

定义一个结构体匿名字段,使用列表初始化

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

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

16_golang结构体匿名字段.png

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

Student 结构体第一个字段类型为 Person,也是一个结构体类型,但该字段我们没有定义名字,即使一个匿名字段,Student 结构体的第二个字段是一个 float64 类型的字段。

接着,我们初始化结构体时,首先初始化 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 { Person Score float64 } //定义一个结构体匿名字段,使用键值对初始化 stu := Student{ Person:Person{ Name:"HaiCoder", Age:20, }, Score:60, } fmt.Println("Student =", stu) }

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

17_golang结构体匿名字段.png

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

如果定义的结构体使用的是匿名字段,那么使用键值对赋值的时候,键的名字默认就是结构体的类型,所以我们这里赋值的字段是 Person。

Go语言结构体匿名字段总结

Go 语言中结构体支持结构体匿名字段,即定义结构体时,只写结构体的类型,不写结构体的名字。结构体的匿名字段只能用在结构体类型的嵌套中。

如果定义的结构体使用的是匿名字段,那么使用键值对赋值的时候,键的名字默认就是结构体的类型名。结构体匿名字段定义语法:

type StructName struct { Field1 Field1Type Field2 Field1Type … } type StructName2 struct { Field1 Field1Type StructName … }