go语言中new的用法 golang new struct

Go语言中new和 make的区别详解

new 主要用于结构体的初始化

创新互联专注于北川羌族网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供北川羌族营销型网站建设,北川羌族网站制作、北川羌族网页设计、北川羌族网站官网定制、小程序设计服务,打造北川羌族网络公司原创品牌,更为您提供北川羌族网站排名全网营销落地服务。

make用于数组array,切片slice,协程chnnel的初始化

例如: users:=make([10]int);

msg:=make(chan int);

new会分配结构空间,并初始化为清空为零,不进一步初始化

new之后需要一个指针来指向这个结构

make会分配结构空间及其附属空间,并完成其间的指针初始化

make返回这个结构空间,不另外分配一个指针

例子new:

var p *[]int = new([]int)

p := new([]int)

以上分配了一个slice结构,但是结构中的应该指向底层数组的ptr指针为空,故实际不能往这个slice里面存取数据

同时分配了一个指针p,也即(在32位系统中)占4个字节并存放slice结构的地址

例子make:

var v []int = make([]int, 0)

v := make([]int, 0)

以上分配了一个slice结构,且结构中的应该指向底层数组的ptr指针已经指向了某个底层数组,这个底层数组应该已经分配了,故这个slice已经可以使用了

注意v就是这个slice结构,而不是一个指向slice的指针

上述仅是示例,一般使用时都会明确长度和容量:v := make([]int, 10, 50)

结论:

由上可见,用new来分配slice的意义不大,因为没有恰当的初始化,无法直接使用

有附带空间的结构,使用make来初始化,可以完成内部指针初始化,其后可以立即使用

golang 内置函数new 和struct 初始化的区别

在go语言中new()这是一个用来分配内存的内置函数,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配的t类型的零值的指针。在golang的代码定义如下:funcnew(tType)*Typestrut{}直接使用struct{}来初始化strut时,返回的是一个struct类型的值,而不是指针两者是不一样的两者对比代码如下:typeStudentstruct{idintnamestring}funcmain(){vars_1*Student=new(Student)s_1.id=100s_1.name="cat"vars_2Student=Student{id:1,name:"tom"}fmt.Println(s_1,s_2)}输出结果:{100cat}{1tom}从上面代码的声明和打印的结果中就可以看出s_1的类型为指针,s_2为一个Student类型

new有几种用法?

1、开辟单变量地址空间

new int;  //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a. 2)int *a = new int(5) 作用同上,但是同时将整数赋值为5。

2、开辟数组空间

要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进行访问。用new可以动态开辟,撤销地址空间。在编程序时,若用完一个变量,下次需要再用,可以在每次开始使用时开辟一个空间,在用完后撤销它。

扩展资料:

定位放置new的作用:

1、在 C++ 中,通过 new 运算符来实现动态内存分配。new操作符从自由存储区(free store)上为对象动态分配内存空间,凡是通过new操作符进行内存申请,该内存即为自由存储区。

2、new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。

3、new内存分配失败时,会抛出bac_alloc异常,它不会返回NULL;malloc分配内存失败时返回NULL。

参考资料来源:

百度百科-定位放置new


网站栏目:go语言中new的用法 golang new struct
网页路径:http://ybzwz.com/article/dohdhii.html