GO 语言学习 之 结构体
在 Go 语言中,结构体(struct)是一种用户自定义的数据类型,它可以包含多种不同类型的数据组合在一起。结构体为组织和管理相关数据提供了一种有效的方式,常用于表示现实世界中的对象或概念。如果你懂C/C++,那么这个数据结构理解起来挺容易的,只是形式上略有不同。
结构体定义
type <结构体名> struct {
<成员1> <类型1>
<成员2> <类型2>
<成员3> <类型3>
...
}
type
关键字:表示定义了一个新类型。- struct 关键字:表示新的类型是一个结构体类型
- 结构体可以包含多个成员,每个成员的类型可以相同也可以不同
- 成员命名也区分大小写,大驼峰命名外部包是否可以被引用
- 结构体可以有自己的成员函数(这里后续再补充)
- 成员函数也是要有大小写的命名,大驼峰命名外部包可以引用
- 作为函数形式参数的时候,通常是传递指针类型,因为结构体的内容可能会很大
- 另外,指针类型可以直接修改原始数据,把修改的结果带回来,所以使用的时候也要注意
- 还有一种特殊的用法,匿名结构
- 指针变量与普通变量在访问结构体成员的时候都使用 . 的方式访问 (与C语言不一样)
- 结构体支持嵌套使用,最常见的例子就是解析配置 JSON 和 Yaml 内容的时候
结构体的使用
package mainimport "fmt"type Student struct {NumID int // 学号Name string // 姓名ClassID string // 班级Birthday string // 生日Age int // 年龄Sex string // 性别IsAccommodation bool // 是否住校 true 住校 false 不住
}func (s *Student)StudentInfoPrint() {fmt.Println("学号 :", s.NumID)fmt.Println("姓名 :", s.Name)fmt.Println("班级 :", s.ClassID)fmt.Println("生日 :", s.Birthday)fmt.Println("年龄 :", s.Age)fmt.Println("性别 :", s.Sex)fmt.Println("是否住校 :", s.IsAccommodation)
}func main() {stu1 := Student {1, "张三", "一年级", "2020-01-12", 6, "男", true}fmt.Println("===== stu1 =====")stu1.StudentInfoPrint()var stu2 Studentfmt.Println("===== stu2 =====")stu2.StudentInfoPrint()stu3 := &Student{}stu3.Name = "李四"fmt.Println("===== stu3 =====")stu3.StudentInfoPrint()stu4 := &Student{NumID: 4,Name: "王五",ClassID: "二年级",Birthday: "2018-03-12",Age: 7,Sex: "男",}fmt.Println("===== stu4 =====")stu4.StudentInfoPrint()stu5 := new(Student)stu5.NumID = 5stu5.Name = "朱六"stu5.Sex = "女"fmt.Println("===== stu5 =====")stu5.StudentInfoPrint()fmt.Println("匿名结果体使用")stu6 := struct {name stringage int}stu6.name = "刘七"stu6.age = 10fmt.Println("===== stu6 =====")fmt.Println("name : ", stu6.name)fmt.Println("age : ", stu6.age)
}