初学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}返回的是一个类型
详细还需要深入学习
有疑问加站长微信联系(非本文作者)

a:=new(user) <== 创建user变量,并且清零 b:=&user{} <== 返回的是user变量的指针 c:=user{} <== 创建user变量 正如楼主所言,三种写法的效果完全一样,区别只是 语法糖 的差异而已。会方便给不同类型的变量赋值。 反正不需要关心是创建在内存里还是堆栈里,也不用用户释放变量, 看来给用户多一些选择也不好呀...