Golang—make和new

166 阅读1分钟

初始化变量

make和new关键字在Go语言中用来初始化变量,两个关键字都能初始化变量,但在应用上有一定的区别;

make:是初始化内置的数据结构,常用来初始化slice、map、channel;
new:根据传入的类型分配一片内存空间并返回指向这片内存空间的指针;

使用make进行初始化变量

// dataSlice是一个包含data、cap、len的结构体reflect.SliceHeader
dataSlice := make([]int, 0, 10)
data := reflect.TypeOf(dataSlice)
log.Println(data.Kind())

// output
2021/08/16 13:51:40 slice

// dataMap是一个指向runtime.hmap结构体的指针;
dataMap := make(map[string]interface{}, 10)
data := reflect.TypeOf(dataMap)
log.Println(data.Kind())

// output
2021/08/16 11:57:54 map

// dataCh是一个指向runtime.hchan结构体的指针
dataChan := make(chan int, 10)
data := reflect.TypeOf(dataChan)
log.Println(data.Kind())

// output
2021/08/16 13:55:29 chan

使用new进行变量初始化

dataNew := new(int)
data := reflect.TypeOf(dataNew)
log.Println(data.Kind())

// output
2021/08/16 13:43:52 ptr

image.png

总结

new(T)返回T的指针*T并指向T的零值;
make(T)返回的初始化的T,只能用于slice,map,channel。