golang中,struct属于用户定义类型,代表一组字段或属性的集合,它可包含零个或多个任意类型的字段。
声明struct
要声明结构,需要使用 struct
关键字.
具体语法如下:
// ======= 声明结构体
// type 结构体名 struct {
// 属性名 属性类型
// 属性名 属性类型
// ...
// }
// Person 定义一个名为Person 的结构体
type Person struct {
// 相同类型的可以只写一个类型,推荐分开写
name, gender string
age int
mother *Person // 指针
father *Person
}
命名struct和匿名struct
创建一个命名的struct(named Student struct
),类型为Student
。
type Student struct {
name string
course string
score int
}
func main() {
// 创建struct,指定字段
stu1 := Student{
course: "Math",
name: "Jack",
score: 80,
}
// 创建struct,不指定字段,字段按声明的顺序
stu2 := Student{
"Jack",
"PE",
100,
}
fmt.Println(stu1)
fmt.Println(stu2)
// {Jack Math 80}
// {Jack PE 100}
}
创建一个匿名struct
func main() {
stu3 := struct {
name string
age int
}{
name: "Jack",
age: 18,
}
//{Jack 18}
fmt.Println(stu3)
}
访问struct 字段
可以使用 dot . operator
访问或修改struct 中的字段。
例如:
stu3 := struct {
name string
age int
}{
name: "Jack",
age: 18,
}
name := stu3.name
age := stu3.age
// name: Jack,age: 18
fmt.Printf("name: %s,age: %d\n", name, age)
stu3.name = "Jack Ma"
// {Jack Ma 18}
fmt.Println(stu3)
指针struct
type Student struct {
Name string
course string
score int
}
func main() {
// stu *Student
stu := &Student{
Name: "Jack",
}
fmt.Println(stu.Name)
fmt.Println((*stu).Name)
}
stu的类型是 *Student
指针类型。
可以通过 (*stu).Name
访问字段,不过golang中提供了简便的方式,可以不写星号,直接通过stu.Name
访问字段。