Skip to main content

golang struct 类型

· 6 min read

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,

}