Go基础面试题, Go 语言的 array 和 slice 有什么区别?
Go基础面试题, Go 语言的 array 和 slice 有什么区别?
QA
Step 1
Q:: Go 语言的 array 和 slice 有什么区别?
A:: 在 Go 语言中,array 是固定大小的,定义时就指定长度且不可改变,不能动态增长。而 slice 是一个对底层 array 的引用,可以动态增长或缩小,长度可以变化。array 是值类型,直接存储数据,而 slice 是引用类型,存储了指向底层 array 的指针、长度和容量。
Step 2
Q:: 如何在 Go 中创建和初始化 slice?
A:: 可以使用内建函数 make
来创建 slice,比如 make([]int, 5)
创建一个长度为 5
的 int 类型的 slice。也可以通过字面量初始化 slice,比如 []int{1, 2, 3}
。
Step 3
Q:: slice 的容量是如何扩展的?
A:: 当向 slice 添加元素使其超出当前容量时,Go 会自动分配一个新的、更大容量的底层数组,并将旧数组中的元素复制到新数组中。通常情况下,容量会按当前容量的 2
倍扩展,但具体情况依赖于 Go 版本和实现。
Step 4
Q:: 如何安全地传递 slice?
A:: 由于 slice 是引用类型,传递 slice 只会传递底层数组的引用。如果在函数内修改 slice 的内容,会影响到其他引用了同一个底层数组的 slice。所以在某些情况下,需要创建副本以避免不期望的副作用,使用 copy
函数可以实现浅拷贝。
用途
面试 array 和 slice 的区别是为了考察候选人对 Go 语言数据结构的理解,以及在内存管理方面的能力。在实际生产环境中,正确理解和使用 slice 是非常重要的,特别是在处理大数据集合或性能关键的代码时。理解 slice 的扩展机制对于优化性能、避免内存泄漏等方面也非常关键。\n相关问题
🦆
如何在 Go 中进行深拷贝?▷
🦆
Go 语言中的 map 和 slice 如何结合使用?▷
🦆
如何在 Go 中避免 slice 的内存泄漏?▷
🦆
Go 中 slice 和指针有什么区别?▷