golang ----------- new,make,struct{}

1、适用范围:make 只能创建类型(slice map channel), new可以对所有类型进行内存分配

2、返回值: new 返回指针, make 返回引用

new返回一个指向已清零内存的指针,而make返回一个复杂的结构。

make返回复杂的结构为slice时:它是一个包含3个域的结构体:指向slice中第一个元素的指针,slice的长度,以及slice的容量

3、填充值: new 填充零值, make 填充非零值

new(T)会为T类型的新项目,但new它并不初始化内存,只是将其置零

make(T, args)返回一个初始化的(而不是置零),类型为T的值(而不是*T)。之所以有所不同,是因为这三个类型的背后引用了使用前必须初始化的数据结构

例如:

make([]int, 10, 100) 分配一个有100个int的数组,然后创建一个长度为10,容量为100的slice结构,该slice引用包含前10个元素的数组,对应的,new([]int)返回一个指向新分配的,被置零的slice结构体的指针,即指向值为nil的slice的指针

4、直接使用struct{} 来初始化strut时,返回的是一个struct类型的值,而不是指针

type Student struct{
	name string
	age int
}

func main(){
	var s1 *Student = new(Student)
	s1.age = 22
	s1.name = "tcy"
	var s2 Student = Student{age:21,name:"tcy"}
	fmt.Println(s1,s2)      //&{tcy 22} {tcy 21}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值