Files
go-basics/stage05-pointers-memory/02-new-make
2026-03-14 19:03:12 +08:00
..
2026-03-14 19:03:12 +08:00
2026-03-14 19:03:12 +08:00
2026-03-14 19:03:12 +08:00

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 验证答案。