在Go中,以下两段代码之间存在显着差异:
v := &Vector{}
Run Code Online (Sandbox Code Playgroud)
而不是
v := new(Vector)
Run Code Online (Sandbox Code Playgroud)
min*_*omi 30
不,他们的回报是一样的,
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))
}
Run Code Online (Sandbox Code Playgroud)
结果:
*main.Vector
*main.Vector
Run Code Online (Sandbox Code Playgroud)
邮件列表上有一些争论,两者都令人困惑:
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
zzz*_*zzz 15
是的,两个代码片段之间存在根本区别.
v := &Vector{}
Run Code Online (Sandbox Code Playgroud)
工作仅用于Vector作为一个结构类型,图型,阵列型或片型
v := new(Vector)
Run Code Online (Sandbox Code Playgroud)
工程Vector的任何类型.
示例:http://play.golang.org/p/nAHjL1ZEuu