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,
…
}