go数组切片
主要知识点
数组(array)类型和切片(slice)都属于集合类的类型;他们最重要的不同是:数组类型的值(以下简称数组)的长度是固定的,而切片类型的值(以下简称切片)是可变长的。
数组的容量永远等于其长度,都是不可变的
Go 语言的切片类型属于引用类型,同属引用类型的还有后面会讲到的字典类型、通道类型、函数类型等
Go 语言的数组类型则属于值类型,同属值类型的有基础数据类型以及结构体类型。
怎样正确估算切片的长度和容量?
初始化切片时,如果不指明其容量,那么它就会和长度一致
一个切片的容量可以被看作是透过这个窗口最多可以看到的底层数组中元素的个数。
切片代表的窗口是无法向左扩展的
怎样估算切片容量的增长?
一旦一个切片无法容纳更多的元素,Go 语言就会想办法扩容。但它并不会改变原来的切片,而是会生成一个容量更大的切片,然后将把原有的元素和新元素一并拷贝到新切片中。
你可以简单地认为新切片的容量(以下简称新容量)将会是原切片容量(以下简称原容量)的 2 倍。
当原切片的长度(以下简称原长度)大于或等于
1024
时,Go 语言将会以原容量的1.25
倍作为新容量的基准(以下新容量基准)。