一、何时使用make和new?
二、make和new的区别
1.new这个内置函数用来分配内存。 第一个参数是类型,而不是值,返回值是指向该类型的新分配的零值(默认值)的指针。例如:
此时指针的内容为nil,不能使用,除非再次指向新的引用,所以意义不大,初始化切片时需要使用make。
2.make这个内置函数负责分配和初始化slice,map或chan类型的变量。 像new一样,第一个参数是类型,而不是值。 与new不同,make的返回类型与其参数的类型相同,而不是指向它的指针。 例如:
- slice(切片):大小指定长度。 切片的容量等于其长度。 可以提供第二个整数参数来指定不同的容量。 它必须不小于长度。 例如,make([] int,0,10)分配一个大小为10的基础数组,并返回一个长度为0且容量为10的切片,该切片由该基础数组支持(即切片的底层由数组维护)。
- map(映射):为空映射分配足够的空间来容纳指定数量的元素。 该大小可以省略,在这种情况下,分配的起始大小较小。
- channel(通道):使用指定的缓冲区容量初始化通道的缓冲区。 如果为零或忽略大小,则通道不缓冲。