大家好,我是煎鱼。最近也是面试季+毕业季了,很多同学正在积极准备面试。尤其是很多同学,已经通过官网资料熟悉了 Go 基本语法,但没有太大把握。希望对一些常见的棘手面试问题做一些预习。今天结合与此分享给大家,一起学习和进步!面试问题请先在脑子里思考一下具体的运行结果,再查看答案。如下代码:func main() {
s := make([]int, 0, 2)
doSomething(s)
fmt.Println(s)
}
func doSomething(a []int) {
a = append(a, 1)
}
// 煎鱼干点什么...面试问题:fmt.Println的输出结果是什么?问题解析运行程序,查看输出结果:[]fmt.Println最终打印的是一个长度为 0 的切片。答案是:空切片。(你答对了吗?)在 Go 中,函数参数是按值传递的,这意味着上述代码在参数传递时,创建了参数值的副本并传递给函数。而切片实际上是一个包含长度(len)、容量(cap)和指向底层数组指针(data)的结构体。当我们将切片作为函数参数传递时,实质上复制的是切片的 SliceHeader,对应的底层数组是保持不变的。结合代码来讲,就是因为在doSomething函数中,创建了SliceHeader的新副本。然后append函数会在超过容量时重新分配新切片,并返回更
...
继续阅读
(290)