golang编程 - new 和make的异同点
A. new
new 和 make 都是实例化一个 类型,开辟一片内存,生成一个具有物理内存的变量
new (type) *type
new 返回的是一个指针 - 并且实例化的变量默认给予零值,比如int 类型初始值为 0 string的类型初始值为“”
如果 new 一个结构体的话,结构体的成员变量值均为零值
new使用范围无限制 (基本数据类型 + 派生数据类型)
B. make
make 的话 ,仅仅可以用于 map slice channel 这3种
make 返回的是变量值
func make(t Type,size IntegerType) Type
make可以定义变量长度
make([]int, 1) 返回的是 [0] 即 make给变量分配的依然是零值
查看 变量类型 -
reflect.TypeOf
下面可以看出 var e * int 和 new(int)的区别
var e *int fmt.Println(e) //输出一个nil 解释:定义了一个int指针,此刻是一个零值得存在,那么这个地址是nik // fmt.Println(*e) //对这个指针取值 - 指针都是nil自然找不到这个指针指向的值,所以输出 invalid memory address or nil pointer e = new(int) fmt.Println(*e) //这个时候输出0,这个时候没报错,是因为new初始化一个int类型指针的时候,同时这个指针指向的值存储得,也会初始化 // new(T)会为T类型的新项目,分配被置零的存储,并且返回它的地址
对于结构体的实例化 另一种方式 - &human{ } ,那么返回的也是 一个 * human 指针
golang之中 & 是对变量取地址,而*是对指针取值
I can see a bigger world.

浙公网安备 33010602011771号