slice 数据结构
type slice struct {
array unsafe.Pointer
len int
cap int
}
- 基于数组或者slice生成一个slice的时候,新的slice和原来数组/slice 的底层数组是同一个
- 基于数组或者slice生成slice的cap=原来对应的数组长度-现在slice的第一个元素对应的索引
- slice 作为参数传递的是 副本,但是对应的数组的指针不变
- 扩容规则:
在一般的情况下,你可以简单地认为新切片的容量(以下简称新容量)将会是原切片容量(以下
简称原容量)的 2 倍。
但是,当原切片的长度(以下简称原长度)大于或等于1024时,Go 语言将会以原容量的1.25
倍作为新容量的基准(以下新容量基准)
slice 数组指针什么情况下会发生变化?
36讲这么说:
确切地说,一个切片的底层数组永远不会被替换。为什么?虽然在扩容的时候 Go 语言一定会生
成新的底层数组,但是它也同时生成了新的切片。它是把新的切片作为了新底层数组的窗口,而
没有对原切片及其底层数组做任何改动。
实际测试:
扩容的时候slice的数组发生了变化,但是slice并没有发送变化.
有疑问加站长微信联系(非本文作者)