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")
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值