看了一下Effective Go,感觉还是收获很多,其中看到new与make的分配空间的区别..我就整理了一下.
new是go内置函数,用于创建一块内存空间,特性如下
new(T) 那么new就会返回星T的值,就是这块内存的地址,类型是(星T,因为符号打不出开),因为在解析的时候是需要类型的解析方式.所以这里就不多总结了.并将new的内存数据置0,我理解的置0应该是将你的数据不同类型就对应不同的0,比如int类型就0,string类型就"",别的可能就nil..不知道是否理解错误.
make绝大多数用于slice,make,channel的创建,特性如下
make接收一个T类型,它会返回一个T类型,并返回一个初始化(并不是置0)的T类型的值,
因为slice是数组的一个区间(我理解是一个结构体吧),slice有3个属性(文档中是写描述符,但是不知道是不是我理解的一样),1是指向数组的指针,2是数组的长度,3是slice的容量,为什么需要容量应该是跟java集合的负载因子同样道理,make是会返回T类型的值是包含这3项的,最重要的就是初始化,所以make应该是用于slice,map,channel的创建了.
var p_new 星[]int = new([]int) //创建一个内存空间,存储[]int数组,并返回地址给p_new,元素都置0
var p_make []int = make([]int,5,100)创建一个内存空间,里面存放数组,5个元素,空间大小为100*类型字节,
新手学Go,可能理解不正确,请纠正~~
有疑问加站长微信联系(非本文作者)