背景
第一次接触到数组和切片的概念是在Python中。Python极其强大的切片操作,让我自然而然的面对Golang时,直接生搬硬套进去了。然后发现在一些场景下的结果不及预期,所以就好好查了一下,Golang的切片底层实现。
数组与切片
什么是数组(Array)?
在计算机科学中,数组数据结构(英语:array data structure),简称数组(英语:Array),是由相同类型的元素(element)的集合所组成的数据结构,分配一块连续的内存来存储。利用元素的索引(index)可以计算出该元素对应的存储地址。 维基百科
什么是切片(Slice)?
在计算机编程中,数组切片是一种从数组中提取元素子集并将其打包为另一个数组的操作,可能与原始数组的维数不同。数组切片的常见示例是从字符串中提取子字符串,“ hello”中的“ ell”,从二维数组中提取行或列,或者从矩阵中提取向量。根据编程语言的不同,数组切片可以由非连续元素组成。 同样取决于语言,新数组的元素可以被别名为原始数组的元素(即与之共享内存)。维基百科。也就是说切片其实是数组的衍生概念。没有数组就不会有切片了。