谁能解释一下这两个符号之间的细微差别:(*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 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
两种形式new(T)
和&T{}
完全等价:都分配一个零 T 并返回一个指向此分配内存的指针。唯一的区别是,这&T{}
不适用于诸如int
; 之类的内置类型。你只能这样做new(int)
。
该表格(*T)(nil)
并没有分配T
它只是返回一个零指针T.你test3 := (*Struct)(nil)
仅仅是一个混淆的惯用的变种var test3 *Struct
。
- 1 回答
- 0 关注
- 205 浏览
添加回答
举报
0/150
提交
取消