Go slice的底层实现原理

参考解析

首先纠正下make和new是内置函数,不是关键字

变量初始化,一般包括2步,变量声明 + 变量内存分配,var关键字就是用来声明变量的,new和make函数主要是用来分配内存的

var声明值类型的变量时,系统会默认为他分配内存空间,并赋该类型的零值

比如布尔、数字、字符串、结构体

如果指针类型或者引用类型的变量,系统不会为它分配内存,默认就是nil。此时如果你想直接使用,那么系统会抛异常,必须进行内存分配后,才能使用。

new 和 make 两个内置函数,主要用来分配内存空间,有了内存,变量就能使用了,主要有以下2点区别:

使用场景区别:

make 只能用来分配及初始化类型为slice、map、chan 的数据。

new 可以分配任意类型的数据,并且置零。

返回值区别:

make函数原型如下,返回的是slice、map、chan类型本身

这3种类型是引用类型,就没有必要返回他们的指针

func make(t Type, size ...IntegerType) Type

new函数原型如下,返回一个指向该类型内存地址的指针

func new(Type) *Type