漫画Go语言中函数new与make的使用和区别

​赖克与甜甜,有趣有料有温度,技术学习有思路!

看看赖克怎么给甜甜讲解Go语言中的new与make吧!


对于值类型的变量,我们通过var 声明,系统会默认为他分配内存空间,并赋该类型的零值。如下,我们声明一个int类型变量i,输出为0。

var i intfmt.Println(i)

而如果我们声明一个指针类型的变量,系统不会为他分配内存,改变量默认就是nil。此时如果你想直接使用,那么系统会抛异常。

var j *int  fmt.Println(j)  *j = 10  //invalid memory address or nil pointer dereference

也就是说,空指针还没有内存分配,是不能使用的。那么要想使用,此时就需要new出场啦。

 

var j *int  j = new(int)  fmt.Println(j)   fmt.Println(*j)  *j = 10  fmt.Println(*j)

声明指针类型变量后,通过new为他分配内存,有了内存空间,这个变量就可以自由的使用啦。

我们来看一下new函数

它只接受一个参数,这个参数是一个类型,分配好内存后,返回一个指向该类型内存地址的指针。同时把分配的内存置为零,也就是类型的零值。

 

  • make 是分配内存并初始化,初始化并不是置为零值。

  • 与new一样,它的第一个参数也是一个类型,但是不一样的是,make返回的是传入的类型,而不是指针!

    

var c chan intfmt.Printf("%#v \n",c) //(chan int)(nil)c = make(chan int)fmt.Printf("%#v", c) //(chan int)(0xc000062060)

声明管道类型变量c,此时c还是nil,不可用;

通过make来分配内存并初始化,c就获得了内存可以使用了。


有趣有料有温度,和我一起学技术!

欢迎关注公众号 来思Go,收看更多赖克与甜甜的技术学习日常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值