(* T)(nil)和&T {} / new(T)有什么区别?高朗
可能有人解释一下这两个符号之间的细微差别:(*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的所有字段分配内存。
回答:
这两种形式的new(T)
和&T{}
是完全等效的:两个分配零T和一个指针返回到该分配的内存。唯一的区别是,&T{}
对于像int
;
这样的内置类型不起作用。你只能做new(int)
。
该表格(*T)(nil)
并 没有 分配T
它只是返回一个零指针T.你test3 :=
(*Struct)(nil)仅仅是一个混淆的惯用的变种var test3 *Struct
。
以上是 (* T)(nil)和&T {} / new(T)有什么区别?高朗 的全部内容, 来源链接: utcz.com/qa/399800.html