go语言初始化结构体new方法的区别

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

初学go,实例化一个对象的时候,搞得有点晕,以前学php,需要一个对象之间new一个即可,但是在go里面有三种方法,如下

a:=new(user)
b:=&user{}
c:=user{}

好似这三种方法都可以实现,这是什么原因呢,区别在哪里?

ok,请看下面例子

package main
import (
    "fmt"
)
type user struct {
    id int `1123`
}
func main() {
    a := &user{}
    a.id = 111
    b := user{}
    b.id = 222
    c := new(user)
    c.id = 333
    fmt.Println(a, b, c)
}

 运行后结果如下

&{111} {222} &{333}

现在基本清楚,new(user)和 &user{}这两种方法返回的数据都是一样的,那么这这两种数据究竟有什么不同?我们应该在什么场景使用呢?

百度了一下

&{111}返回的是实例化的对象的指针

{222}返回的是一个类型

详细还需要深入学习


有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:haitgo

查看原文:go语言初始化结构体new方法的区别

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

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