首页 > 试题广场 >

对于以下 Go 代码,运行时输出结果是什么? func ma

[单选题]
对于以下 Go 代码,运行时输出结果是什么?
func main() {
    s := make([]int, 0, 3)
    s = append(s, 1)
    f(s)
    fmt.Println(s)
}
func f(s []int) {
    s = append(s, 2)
}
  • [1]
  • [1 2]
  • [2]
  • 运行时 panic
从源码来看就很好理解,切片底层有三个部分组成,data指向一个数组,len为切片长度,cap为底层数组预留给切片的可用容量。main中通过make进行初始化得到了一个len=0,cap=3的切片[]。通过append增加后就是len+1,同时底层数组的第零个元素修改为1,切片变为[1],此时将s作为函数参数传入,实际上进行值拷贝,得到的新s的data和原来s中data所指向的区域一致,len=1,cap=3。在函数中进行append实际上已经完成对底层数组的修改,底层数组雀石是[1,2]。但是对于main中s来说由于len=1,所以打印时只会打印持有长度的数据,也就是[1]
发表于 2025-10-12 12:10:08 回复(0)