一. 什么是结构体
- 将一类事物的特性提取出来(比如猫类) 形成一个新的数据类型, 就是一个结构体
- 通过这个结构体, 我们可以创建多个变量(实例/对象)
- 事物可以是猫类,也可以是Person、Fish或者某个工具类
引入实际问题
Q:张老太养了两只猫猫一只名字叫小白,今年3岁, 白色
还有一只叫小花,今年100岁,花色
请编写一个程序 存储这两只猫咪
package main
import (
"fmt"
)
func main() {
// 1. 使用变量处理
var cat1Name string = "小白"
var cat1Age int = 3
var cat1Color string = "白色"
var cat2Name string = "小花"
var cat2Age int = 100
var cat2Color string = "花色"
fmt.Println("cat:", cat1Name, cat1Age, cat1Color, cat2Name, cat2Age, cat2Color)
// 2. 使用数组处理
var catNames [2]string = [...]string{"小白", "小花"}
var catAges [2]int = [...]int{3, 100}
var catColors [2]string = [...]string{"白色", "花色"}
fmt.Println(catNames)
fmt.Println(catAges)
fmt.Println(catColors)
}
现有技术的缺点
- 使用变量或者数组来解决养猫的问题,不利于数据的管理和维护,因为名字, 年龄, 颜色都是属于一只猫的,但是这里是分开保存的
- 如果我们希望对一只猫的属性(名字、年龄、颜色) 进行操作(绑定方法) 也不好处理
- 这里我们可以使用结构体处理这类问题
定义一个Cat结构体, 将Cat的各个字段/属性信息, 放入Cat结构体进行管理
type Cat struct {
Name string
Age int
Color string
Hobby string
}
main方法中使用结构体
// 5 使用结构体
// 5.2 创建一个Cat的变量
var cat1 Cat
cat1.Name = "小黑"
cat1.Age = 3
cat1.Color = "白色"
cat1.Hobby = "吃<。)#)))≦"
fmt.Println("cat1=", cat1)
fmt.Println("======= 猫咪的信息如下 =======")
fmt.Println("name=", cat1.Name)
fmt.Println("age=", cat1.Age)
fmt.Println("color=", cat1.Color)
fmt.Println("hobby=", cat1.Hobby)
从上面的结构体和结构体变量(实例)可以看出区别和联系
- 结构体是自定义的数据类型,代表一类事物
- 结构体变量(实例)是具体的,实际的,代表一个具体变量