make
make 的作用是初始化内置的数据结构,也就是切片、哈希表和 Channel,返回的是引用类型本身
new
new 的作用是根据传入的类型分配一片内存空间并返回指向这片内存空间的指针,所以返回的是指向类型的指针
相同点
make和new都是内存的分配(堆上)
代码
package main
import "fmt"
func main() {
// make
slice := make([]int, 0, 100)
hash := make(map[int]bool, 10)
ch := make(chan int, 5)
fmt.Printf("%T\n",slice) //[]int
fmt.Printf("%T\n",hash) //map[int]bool
fmt.Printf("%T\n",ch) // chan int
// new
i := new(int)
fmt.Printf("%T\n",i) // *int
fmt.Printf("%v\n",*i) // 0
}