go语言中new和make的区别

打印 上一主题 下一主题

主题 474|帖子 474|积分 1422

我们以一个new一个map和make一个map为例来解说下:
make map:
  1. package main
  2. import (
  3.         "fmt"
  4. )
  5. func main() {
  6.         umap := make(map[string]string)
  7.         fmt.Println(umap)
  8. }
复制代码
找到map源码,找到makemap方法

可以看到,执行make map的时间,底层会调用makemap方法(slice和chan也有各自的make方法)
也就是说,make是用来初始化go中map、slice、chan的特有方法,它既会给对象分配内存,也会初始化对象。但是new不会,new只会单纯给对象分配内存。
再举个例子:
  1. package main
  2. import "fmt"
  3. type MyMap struct {
  4.         SingleMap map[string]string
  5.         Uname     string
  6.         Uage      int
  7. }
  8. func main() {
  9.         m := *new(MyMap)
  10.         fmt.Println("uname:", m.Uage)
  11.         m.SingleMap["uname"] = "lyl"
  12.         fmt.Println(m)
  13. }
复制代码
我自界说了一个MyMap,通过new初始化后,往这个map的SingleMap里添加元素的时间报错了,由于SingleMap还没有初始化。









免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表