Go语言中make和new函数怎么使用(go语言,make,new,开发技术)

时间:2024-05-03 14:58:31 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

相同点:

make和new都是用来创建分配类型内存的。

不同点:

先看下面的代码

packagemain<brdata-filtered="filtered">import"fmt"<brdata-filtered="filtered">funcmain(){vari*intvarx=10*i=xfmt.Println(*i)}

编译过程会出错

panic: runtime error: invalid memory address or nil pointer dereference <br data-filtered="filtered">[signal 0xc0000005 code=0x1 addr=0x0 pc=0x48b576]

我们的想法是把 10 赋值 i指向的地址,但是这里由于 *i 没有初始化,所以并不知道 *i的地址是什么,如果直接 *i的赋值为10,那么肯定是不行的(10这个地址没有)

所以要想使用 *i,需要把 x的地址给i,修改成如下代码

vari*intvarx=10i=&xfmt.Println(*i)

补充: * 代表取地址里内容&代表取地址

或者使用 new 进行初始化,代码如下:

varx=10vari*inti=new(int)*i=xfmt.Println(*i)

new的源代码如下

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

Go语言中make和new函数怎么使用

make也是用于内存分配的,但是和new不同,它只用于chan、map以及slice的内存创建,

而且它返回的类型就是这三个类型本身,而不是他们的指针类型,因为这三种类型就是引用类型,所以就没有必要返回他们的指针了。

综上:

二者都是内存的分配(堆上)

区别1
  • make只用于slice、map以及channel的初始化(非零值);

  • new用于类型的内存分配,并且内存置为零。

区别2
  • make返回的还是这三个引用类型本身;

  • new返回的是指向类型的指针。

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Go语言中make和new函数怎么使用的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:SpringCloud负载均衡组件Ribbon源码分析下一篇:

16 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18