Go面试题更新 2026-08-05

在 Go 语言中,使用 make 创建 slice、map 和 channel 时,可以传入哪些参数?这些参数分别有什么作用?

技术原理Go

考察说明

考察对 Go 语言内置引用类型创建机制的理解,以及 make 与 new 的区分。

回答思路

  1. 【回答框架 1】make 函数用于创建 slice、map 和 channel 三种引用类型,返回的是已初始化的引用类型值。slice 创建时可以传入长度和容量,前者表示初始元素个数,后者表示底层数组的容量,容量必须不小于长度。
  2. 【回答框架 2】map 创建时只能传入一个可选参数,即初始容量提示,用于预分配哈希表空间以减少扩容,但实际容量会动态增长。
  3. 【回答框架 3】channel 创建时可以传入容量参数,表示缓冲区大小,若省略或为 0 则表示无缓冲通道,用于同步通信。
  4. 【回答框架 4】make 与 new 的区别:make 返回的是类型本身(如 []int),而 new 返回的是指向零值的指针(如 *int),且 new 不会对 slice、map、channel 进行内部初始化。
  5. 【关键点 1】make 仅支持 slice、map、channel 三种类型。
  6. 【关键点 2】slice 的容量参数必须不小于长度,且容量可省略默认等于长度。
  7. 【关键点 3】map 的容量参数只是提示,实际大小可动态扩展。
  8. 【关键点 4】channel 容量为 0 或省略时为无缓冲通道,非 0 则为有缓冲。
  9. 【易错点 1】误以为 make 可以用于所有类型,实际上只能用于上述三种引用类型。
  10. 【易错点 2】忽略 slice 容量与长度区别,可能导致对底层数组共享和扩容机制的误解。
  11. 【易错点 3】将 channel 的缓冲容量误解为消息数量上限,实际是队列长度,发送超过容量会阻塞(除非有接收者)。