代码路径:Go 结构体
这一章要记住什么
这一章主要讲三个点:
- 结构体用来把多个字段组合成一个自定义类型。
- 初始化结构体有键值对和按顺序两种方式。
- 结构体变量和结构体指针都可以用
.访问字段。
1. 定义结构体
代码里:
go
type Student struct {
ID int
Name string
Age int
Score int
}
Student 是一个自定义类型,里面有四个字段。
text
Student
+-----------+
| ID int |
| Name str |
| Age int |
| Score int |
+-----------+
总结一下
结构体适合描述一个对象的多个属性,比如学生、用户、订单、商品。
2. 键值对初始化
代码里:
go
st := Student{
ID: 100,
Name: "kun",
Age: 29,
Score: 100,
}
这种方式写字段名,顺序不重要,没有写的字段会使用零值。
text
字段名明确:
ID -> 100
Name -> "kun"
Age -> 29
Score -> 100
总结一下
实际开发里更推荐键值对初始化,可读性更好,结构体新增字段时也更稳。
3. 值列表初始化
代码里:
go
stu := &Student{
101,
"li",
20,
99,
}
这种方式不写字段名,必须严格按照结构体字段顺序赋值。
前面的 & 表示取地址,所以 stu 是 *Student 类型。
text
Student 字段顺序:
ID -> Name -> Age -> Score
值列表:
101 -> "li" -> 20 -> 99
总结一下
值列表初始化更短,但依赖字段顺序。结构体字段一多,就容易读错。
4. 字段访问
代码里:
go
fmt.Println(st.Score)
fmt.Println(stu.Name)
st 是结构体变量,stu 是结构体指针,但访问字段都可以用 .。
Go 会自动帮结构体指针做解引用。
text
st.Score
|
v
直接访问结构体字段
stu.Name
|
v
Go 自动理解为 (*stu).Name
总结一下
Go 里访问结构体字段统一用 .,不用像 C/C++ 那样区分 . 和 ->。
易错点
- 值列表初始化必须按字段顺序写完整。
- 键值对初始化没写的字段会使用零值。
&Student{...}得到的是结构体指针。- 结构体指针访问字段时也用
.。
快问快答
Q1:结构体适合解决什么问题?
答:
适合把一组相关字段组织成一个自定义类型,比如学生信息、用户信息、订单信息。
Q2:结构体初始化推荐哪种方式?
答:
一般推荐键值对初始化,因为字段含义清楚,后期加字段也不容易出错。
Q3:为什么结构体指针也能用 . 访问字段?
答:
Go 编译器会自动帮我们解引用,相当于把 stu.Name 理解成 (*stu).Name。
一句话总结
结构体就是把多个字段打包成一个类型,初始化时推荐写字段名,访问字段统一用 .。