为了账号安全,请及时绑定邮箱和手机立即绑定

(*T)(nil) 和 &T{}/new(T) 有什么区别?高朗

(*T)(nil) 和 &T{}/new(T) 有什么区别?高朗

Go
慕容森 2021-09-10 17:32:41
谁能解释一下这两个符号之间的细微差别:(*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


查看完整回答
反对 回复 2021-09-10
  • 1 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信