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