Golang中make和new初始化对象的区别
2019-12-05 本文已影响0人
TZX_0710
1.关于在golang当中我们经常使用new或者make去创建对象那么 讲解一下new和make的区别
Golang中 new 和 make 是两个内置函数,主要用来创建并分配类型的内存。在我们定义变量的时候,可能会觉得有点迷惑,不知道应该使用哪个函数来声明变量,其实他们的规则很简单,new 只分配内存,而 make 只能用于 slice、map 和 channel 的初始化
package main
import "github.com/astaxie/beego/logs"
type Student struct {
Name string
Age int
}
func main() {
//初始化一个对象
student := new(Student)
//输出对象在内存中的地址 地址为0
logs.Info(*student)
//同等与new
stu := &Student{}
logs.Info(*stu)
//同等与 new &Student{}
st := Student{}
logs.Info(st)
var newstu *Student
// //panic: runtime error: invalid memory address or nil pointer dereference
// //[signal 0xc0000005 code=0x0 addr=0x0 pc=0x668524]
//如果为进行初始化直接赋值 那么这个参数会进行报错
//new 函数,它返回的永远是类型的指针,指针指向分配类型的内存地址
newstu=new(Student)
newstu.Name="张三"
logs.Info(newstu)
//通过make创建对象 make只能创建slice chan map
//make 只能用来分配及初始化类型为 slice、map、chan 的数据。new 可以分配任意类型的数据;
//new 分配返回的是指针,即类型 *Type。make 返回引用,即 Type;
//new 分配的空间被清零。make 分配空间后,会进行初始化;
//make 函数只用于 map,slice 和 channel,并且不返回指针
students := make([]Student, 0)
logs.Info(students)
}