(* T)(零)和& T {} / new(T)之间有什么区别? Golang

时间:2015-01-07 20:14:25

标签: memory memory-management syntax go

有人可以解释这两种表示法之间的细微差别:(*T)(nil)/new(T)&T{}

type Struct struct {
    Field int
}

func main() {
    test1 := &Struct{}
    test2 := new(Struct)
    test3 := (*Struct)(nil)
    fmt.Printf("%#v, %#v, %#v \n", test1, test2, test3)
    //&main.Struct{Field:0}, &main.Struct{Field:0}, (*main.Struct)(nil) 
}

看起来这个(*T)(nil)与其他的唯一区别在于它返回nil指针或没有指针,但仍然为Struct的所有字段分配内存。

1 个答案:

答案 0 :(得分:10)

两种形式new(T)&T{}完全等效:两者都分配零T并返回指向此分配内存的指针。唯一的区别是,&T{}int等内置类型不起作用;你只能做new(int)

表单(*T)(nil)执行分配T它只返回指向T的nil指针。您的test3 := (*Struct)(nil)只是惯用语的混淆变体{ {1}}。