简介

切片(slice)是go的一种基本数据结构,是从动态数组的概念而来的,但是切片本身并不是动态数组或者数组指针,而是一种特殊的数组引用。

由于go的数组是值类型(C的数组在赋值和传参隐方式是用来数组的指针),使用=赋值或者传参都会复制整个数组,数组的复制会消耗大量内存,这样大家就会想到用指针传递,但是指针传递时会有一个很严重的问题,就是指针的指向改变了,其它使用这个指针的指向也会改变,这样非常不安全,因此,go使用切片这种引用的方式来传递数组,既保证了不会创建多余的数组(节省内存),又保证了安全性(相对于指针传递)

其实这个设计道哥觉得不太好,使用切片分配的底层数组可能会分配在堆上,会给GC造成压力,影响性能(分配慢、回收慢,开销大)

基础构造