记忆 – (* T)(无)和&T {} /新(T)之间有什么区别? Golang
发布时间:2020-12-16 09:28:09 所属栏目:大数据 来源:网络整理
导读:任何人都能解释这两种符号之间的细微差别:(* T)(无)/新(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:
任何人都能解释这两种符号之间的细微差别:(* T)(无)/新(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这样的内置类型;你只能做新的(int).
形式(* T)(nil)不分配T它只返回指向T的nil指针.您的test3:=(* Struct)(nil)只是惯用var test3 * Struct的混淆变体. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |