make 和 new 是golang中初始化一个结构时,经常会使用到的关键子,但是这两个关键字常常让我们感到困惑。因为它们能够初始化的结构并不相同。
make 的作用是初始化内置的数据结构,例如slice(切片)、哈希表和 Channelnew 的作用是根据传入的类型分配一片内存空间并返回指向这片内存空间的指针例如:
//创建了一个元素为int的slice,返回的是slice的头部指针
slice := make([]int, 0, 100)
//创建了一个key为int,value为布尔类型的map,返回的是结构体指针
m := make(map[int]bool, 10)
//创建了一个元素为int的管道,返回的是结构体的指针
ch := make(chan int, 5)而new呢,相比与复杂的 make 关键字, 功能就简单多了,它只能接收类型作为参数然后返回一个指向该类型的指针
例如:
i := new(int)
//完全等价于new,返回的都是指针
var v int
i := &v