golang ----------- new,make,struct{}_田园园野的博客-CSDN博客_golang new struct

1、适用范围:make 只能创建类型(slice map channel), new可以对所有类型进行内存分配

2、返回值: new 返回指针, make 返回引用

new返回一个指向已清零内存的指针,而make返回一个复杂的结构。

make返回复杂的结构为slice时:它是一个包含3个域的结构体:指向slice中第一个元素的指针,slice的长度,以及slice的容量

3、填充值: new 填充零值, make 填充非零值

new(T)会为T类型的新项目,但new它并不初始化内存,只是将其置零

make(T, args)返回一个初始化的(而不是置零),类型为T的值(而不是*T)。之所以有所不同,是因为这三个类型的背后引用了使用前必须初始化的数据结构

例如:

make([]int, 10, 100) 分配一个有100个int的数组,然后创建一个长度为10,容量为100的slice结构,该slice引用包含前10个元素的数组,对应的,new([]int)返回一个指向新分配的,被置零的slice结构体的指针,即指向值为nil的slice的指针

4、直接使用struct{} 来初始化strut时,返回的是一个struct类型的值,而不是指针

type Student struct{    name string    age int} func main(){    var s1 *Student = new(Student)    s1.age = 22    s1.name = "tcy"    var s2 Student = Student{age:21,name:"tcy"}    fmt.Println(s1,s2)      //&{tcy 22} {tcy 21}}

原网址: 访问
创建于: 2022-08-21 12:48:54
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论