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) }
程序运行后,控制台输出如下:
首先,我们定义了一个结构体 Person,该结构体有两个字段,接着再次定义了一个结构体 Student,该结构体有两个字段。
Student 结构体第一个字段类型为 Person,也是一个结构体类型,但该字段我们没有定义名字,即使一个匿名字段,Student 结构体的第二个字段是一个 类型的字段。
接着,我们初始化结构体时,首先初始化 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) }
程序运行后,控制台输出如下:
首先,我们定义了一个结构体 Person,该结构体有两个字段,接着再次定义了一个结构体 Student,该结构体有两个字段,接着,我们使用键值对的方式初始化结构体。
如果定义的结构体使用的是匿名字段,那么使用键值对赋值的时候,键的名字默认就是结构体的类型,所以我们这里赋值的字段是 Person。
Go语言结构体匿名字段总结
Go 语言中结构体支持结构体匿名字段,即定义结构体时,只写结构体的类型,不写结构体的名字。结构体的匿名字段只能用在结构体类型的嵌套中。
如果定义的结构体使用的是匿名字段,那么使用键值对赋值的时候,键的名字默认就是结构体的类型名。结构体匿名字段定义语法:
type StructName struct { Field1 Field1Type Field2 Field1Type … } type StructName2 struct { Field1 Field1Type StructName … }