go make和new的区别

make 的作用是初始化内置的数据结构,也就是我们在前面提到的切片、哈希表和 Channel

new 的作用是根据传入的类型分配一片内存空间并返回指向这片内存空间的指针

make的用法

slice := make([]int,0,20);
hash := make(map[int]string,10)
ch := make(chan int,5)

slice 是一个包含 data、cap 和 len 的结构体
hash  是一个指向 runtime.hmap 结构体的指针;
ch    是一个指向 runtime.hchan 结构体的指针;

相比与复杂的 make 关键字,new 的功能就很简单了,
它只能接收一个类型作为参数然后返回一个指向该类型的指针。

hash := new(int)
*hash = 10;
fmt.Println(*hash)

//得到一个指向切片指针的指针  new 声明 hash 切片  chan 都是nil , 是不能直接使用的所以需要使用make初始化的才能使用 
arr := new([]int)
if *arr == nil{

 fmt.Println("nil is ok")
}
//增加元素
a := append(*arr, 1)
a = append(a, 2)
fmt.Println(a)

hash_m := new(map[int]string)
if *hash_m == nil{

   fmt.Println("nil is ok")
}
ch_m := new(chan int)

if *ch_m == nil{

   fmt.Println("nil is ok")
}

 

你可能感兴趣的:(go,go)