Go面试题更新 2026-08-05

在 Go 语言中,将切片传递给函数时,需要注意哪些问题?

风险判断技术原理Go

考察说明

考查对 Go 切片底层结构(指针、长度、容量)及值传递语义的理解。

回答思路

  1. 【回答框架 1】切片本质是结构体,包含指向底层数组的指针、长度 len 和容量 cap。切片作为参数传递时,是传递切片的副本,即这三个字段的拷贝,但指针仍指向同一底层数组。
  2. 【回答框架 2】在函数内修改切片元素会影响到原切片,因为共享底层数组。但如果在函数内对切片重新赋值(如 s = append(s, x)),不会改变原切片的长度和容量,原切片仍保持原状。
  3. 【回答框架 3】要修改原切片的长度或容量,必须传入切片指针(*[]T)或使用返回值。常见做法是返回新切片,因为 append 可能导致底层数组重新分配,原切片指针可能失效。
  4. 【回答框架 4】函数内对切片进行 append 操作时,如果容量足够,共享底层数组,可能影响原切片元素(但长度不变);若容量不足,会分配新数组,原切片不受影响。需根据容量预判行为。
  5. 【关键点 1】切片是引用类型,传递时复制结构体,但共享底层数组。
  6. 【关键点 2】在函数内修改元素会反映到原切片。
  7. 【关键点 3】append 可能改变长度或重新分配底层数组,需通过返回值或指针传递来实现修改。
  8. 【易错点 1】误以为传递切片是深拷贝,导致意外修改共享底层数组。
  9. 【易错点 2】过度依赖 append 修改原切片,未考虑容量不足时的重新分配。
  10. 【易错点 3】忽略在函数内对切片重新赋值不会影响原切片。