Go 结构体使用

代码路径: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++ 那样区分 .->


易错点

  1. 值列表初始化必须按字段顺序写完整。
  2. 键值对初始化没写的字段会使用零值。
  3. &Student{...} 得到的是结构体指针。
  4. 结构体指针访问字段时也用 .

快问快答

Q1:结构体适合解决什么问题?

答:

适合把一组相关字段组织成一个自定义类型,比如学生信息、用户信息、订单信息。

Q2:结构体初始化推荐哪种方式?

答:

一般推荐键值对初始化,因为字段含义清楚,后期加字段也不容易出错。

Q3:为什么结构体指针也能用 . 访问字段?

答:

Go 编译器会自动帮我们解引用,相当于把 stu.Name 理解成 (*stu).Name


一句话总结

结构体就是把多个字段打包成一个类型,初始化时推荐写字段名,访问字段统一用 .