互联网面试宝典

您现在的位置是: 首页 > Golang

问题详情

讲讲 Go 的 slice 底层数据结构和一些特性?

面试宝典 2023-06-12 Web前端开发工程师 61
Go 的 slice 底层数据结构是一个结构体,包含三个属性:指针、长度、容量。指针指向底层数组中的第一个元素,长度表示 slice 中当前元素的个数,容量表示底层数组从 slice 开始位置到结束位置的总大小。slice 是引用类型,它的底层数据共享,当其中一个 slice 修改了底层数组的值,其他 slice 也会受到影响。

Go 的 slice 有一些特性:

1. 在使用 append 函数时,如果 slice 的容量不足,Go 会创建一个新的底层数组,并将原来的元素复制到新的底层数组中。

2. 在使用 copy 函数时,如果源 slice 的长度大于目标 slice 的长度,只会拷贝目标 slice 能够容纳的元素;如果源 slice 的长度小于目标 slice 的长度,目标 slice 中剩余位置会保留原来的值。

3. 与数组相同,slice 可以通过索引访问元素。使用一种类似于 Python 的语法 slice[start:end],可以获取 slice 中截取的一段元素,包含 start 位置的元素,但不包含 end 位置的元素。

4. 与数组相同,slice 可以比较大小。但是,相同长度但不同容量的 slice 是不相等的。

5. Slice 也支持多维切片,可以通过多次切片得到二维及更高维的切片。