请问有人能解释一下这两种符号之间微妙的区别:(*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)
和其他的不同之处在于它返回空指针或无指针,但仍为结构体的所有字段分配内存。
(*T)(nil)
不分配内存,那我为什么可以访问它的结构体字段?unsafe
显示的值与使用new(T)
相同。 - Timur Fayzrakhmanov