美文网首页
Golang中make和new初始化对象的区别

Golang中make和new初始化对象的区别

作者: TZX_0710 | 来源:发表于2019-12-05 10:47 被阅读0次

    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)
    
    
    
    }
    
    

    相关文章

      网友评论

          本文标题:Golang中make和new初始化对象的区别

          本文链接:https://www.haomeiwen.com/subject/lucdgctx.html