Go问答 Go 中 make 与 new 的区别是什么?

newbie · 2020年02月27日 · 最后由 eudore 回复于 2020年02月27日 · 269 次阅读

我理解的是:

  • new 会初始化值类型(如果 int,string,struct ),并返回指向该类型值的指针
  • ( map/slice/chan )使用 make,make 返回的是类型本身,引用类型没必要返回他们的指针

但是网上经常出现这样的解释:

  • new 是用来分配内存的内建函数, 但与其它语言中的同名函数不同,它不会 “初始化内存”,只会将 “内存置零"
  • make 只用于创建切片、映射和信道,并返回类型为 T (而非 *T )的一个已初始化 (而非置零)的值

我不明白,初始化内存,内存置零有什么区别,内存都置零了,难道还没有初始化内存吗

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

new 创建是一个空的指针对象相当于&object{},make 创建一个对象,调用内建的特殊函数,例如 newmap newchan,hmap 和 hchan 是一个比较复杂的结构,需要使用 make 创建来执行初始。

new 创建空指针对象 Ptr,make 创建内建基本类型对象 Map Slice Chan。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册