Go语言中的结构体(Struct)笔记
1. 结构体概述
在Go语言中,结构体是一种复合数据类型,用于将多个不同类型的变量组合成一个单一的单元。结构体由一系列命名的成员组成,这些成员可以有不同的类型。结构体允许你创建自定义的数据类型,非常适合用来表示复杂的数据对象,如用户信息、产品详情等。
2. 结构体的声明
结构体的声明使用type
关键字,后面跟着结构体的名称和一对花括号{}
,其中包含成员的定义。
type Person struct {
Name string
Age int
}
3. 结构体的初始化
结构体可以通过指定所有字段的值来初始化,也可以只初始化部分字段。
p1 := Person{Name: "张三", Age: 25} // 全部字段初始化
p2 := Person{Name: "李四"} // 部分字段初始化,Age默认为0
4. 访问结构体的字段
通过点运算符.
可以访问结构体的字段。
fmt.Println(p1.Name) // 输出:"张三"
5. 结构体的方法
结构体可以拥有方法,方法定义时可以指定接收者,接收者可以是指针或值。
type Person struct {
Name string
}
func (p Person) Greet() string {
return "你好,我是" + p.Name
}
6. 结构体的匿名字段
结构体中的匿名字段(没有名称的字段)可以被直接访问,就像它是结构体的一个公共字段一样。
type Student struct {
Person
Grade int
}
这样,Student
类型可以直接访问Person
类型的字段和方法。
7. 结构体的嵌套
结构体可以包含其他结构体作为其字段,实现嵌套结构。
type Address struct {
Street string
City string
}
type Person struct {
Name string
Address Address
}
8. 结构体的比较
两个结构体相等当且仅当它们的每个字段都相等。对于指针类型的字段,比较的是它们的地址,而不是它们所指向的值。
p1 := Person{Name: "张三"}
p2 := Person{Name: "张三"}
fmt.Println(p1 == p2) // 输出:false,因为比较的是结构体的地址
结论
结构体是Go语言中一种非常强大的数据组织方式,它允许你创建复杂的数据模型,封装相关属性和行为。熟练掌握结构体的使用,对于编写高质量、可维护的Go程序至关重要。无论是处理业务逻辑还是设计API接口,结构体都是不可或缺的工具。