02-new-make - new vs make
知识点讲解
new函数
p := new(int) // 返回指向int类型零值的指针
fmt.Println(*p) // 输出: 0
*p = 10 // 可以通过指针修改值
特点:
- 返回指向类型的零值指针
- 适用于所有类型
- 内存已初始化为零值但不执行构造逻辑
make函数
// 创建切片
s := make([]int, 5) // [0, 0, 0, 0, 0]
s := make([]int, 3, 10) // 长度3, 容量10
// 创建map
m := make(map[string]int)
m["key"] = 100
// 创建channel
ch := make(chan int)
特点:
- 只用于创建引用类型(slice、map、channel)
- 返回的是初始化后的类型(非指针)
- 会执行类型的初始化逻辑
主要区别
| 特性 | new() | make() |
|---|---|---|
| 返回类型 | 指针 | 值 |
| 适用类型 | 所有类型 | slice, map, channel |
| 初始化 | 仅零值 | 完整初始化 |
| 常用场景 | 需要指针时 | 创建引用类型时 |
重要提示
- 使用
new创建的指针指向零值 - 使用
make创建的引用类型可以直接使用 - 不要用
new创建切片、map或channel
学习目标
完成本练习后,你将:
- ✅ 理解new和make的区别
- ✅ 掌握new的使用场景
- ✅ 掌握make的使用场景
- ✅ 学会正确选择new或make
练习说明
打开 main.go,根据注释提示填充代码,完成后运行 go test -v 验证答案。