加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

记忆 – (* 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的混淆变体.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读