golang make和new初探
make和new都属于golang的内建函数、二者都起到了定义变量的作用
make为slice map chan三种类型分配和初始化一个对象、也只能为这三种分配,原型如下:
func make(t Type, size ...IntegerType) Type
t代表变量类型、参数列表size根据所定义的变量类型不同而不同、返回值类型与参数类型相同、与new不同的是其返回结果取决于参数类型、而不是返回一个指针
size参数对三种类型具体使用说明如下:
- size指定slice长度、如果有第二个整形参数、则第二个指定的是其容量、容量不能小于其指定的长度
- 空的map被分配足够的空间来容纳指定数量的元素、size可以为空、在size为空的情况下、会分配一个比较小的起始大小
- channel缓存通过指定的缓存容量(size)进行初始化,如果指定size为0或者为空、则会初始化一个非缓冲channel
new为所要定义的变量分配内存,原型如下:
func new(Type) *Type
参数代表变量类型、返回的值是一个指向该类型的新分配的零值的指针
具体输出实例如下:
package main import ( "fmt" "reflect" ) func main() { mp := make(map[string]string,5) fmt.Printf("type:%v\n",reflect.TypeOf(mp)) // 此处输出map[string]string sl := make([]string, 2, 10) fmt.Printf("type:%v\n",reflect.TypeOf(sl)) // 此处输出[]string sn := new(int) fmt.Printf("ntp : %v\n", reflect.TypeOf(sn)) // 此处输出*int }
浙公网安备 33010602011771号