在Go中,以下两个代码段之间存在显着差异:
v := &Vector{}
相对于
v := new(Vector)
不,他们返回的是一样的,
package main import "fmt" import "reflect" type Vector struct { x int y int } func main() { v := &Vector{} x := new(Vector) fmt.Println(reflect.TypeOf(v)) fmt.Println(reflect.TypeOf(x)) }
结果:
*main.Vector *main.Vector
邮件列表上有一些争论,两者都令人困惑:
https://groups.google.com/forum/?fromgroups=#!topic/golang- nuts/GDXFDJgKKSs
需要注意的一件事:
new()是获取指向未命名整数或其他基本类型的指针的唯一方法。您可以编写“ p:= new(int)”,但不能编写“ p:=&int {0}”。除此之外,这是一个优先事项。
来源:https : //groups.google.com/d/msg/golang- nuts/793ZF_yeqbk/-zyUAPT-e4IJ