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)



}

上一篇下一篇

猜你喜欢

热点阅读