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

· · 5000 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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初始化对象的区别

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5000 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传