new

在Golang中new不会初始化内存,只会将内存置零。new(T)会为类型T的新项分配已置零的内存空间,并返回它的地址,即一个类型为*T的值。换个官方的说法就是它会返回一个指针,该指针指向新分配的,类型为T的零值。

  1. 当new作用在一个结构体上时,结构体成员里的每种数据类型的零值就不必进一步初始化,直接new(struct)创建一个新的对象就能正常工作。

  2. ”零值属性“是传递性的。

  3. 少数情况下,若复合字面不包括任何字段,它将创建该类型的零值。表达式new(struct)和&struct{}是等价的。
make

内建函数make只能作用于创建切片,映射和通道,并返回类型为T(非*T)的一个初始化的值(而非置零)。出现这种使用差异的原因在于,这三种类型本质上是引用类型,它们在使用前必须进行初始化。

make([]int, 10, 100)
/*
make会分配一个具有100个int的数组空间
接着创建一个长度为10,容量为100并指向该数组中前10个元素的切片结构
*/

that's all

results matching ""

    No results matching ""