4
有人可以解释这两个符号之间的细微差别:(*T)(nil)/new(T)
和&T{}
。(* T)(nil)和&T {}/new(T)之间的区别是什么? Golang
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)'没有分配内存,为什么我可以访问它的Struct的字段? 'unsafe'显示的值与我刚使用新(T) –
的值相同。您无权访问。 – Volker
是的,你是对的!这是autocompletion)对不起,我noob的问题,但如果是这样,为什么空指针仍然需要字节? –