曹旭辉 发表于 2024-8-20 02:54:02

go语言中new和make的区别

我们以一个new一个map和make一个map为例来解说下:
make map:
package main

import (
        "fmt"
)

func main() {

        umap := make(mapstring)
        fmt.Println(umap)

} 找到map源码,找到makemap方法
https://i-blog.csdnimg.cn/direct/c2a2574a5007424eb6c2ea22c7d6ea36.png
可以看到,执行make map的时间,底层会调用makemap方法(slice和chan也有各自的make方法)
也就是说,make是用来初始化go中map、slice、chan的特有方法,它既会给对象分配内存,也会初始化对象。但是new不会,new只会单纯给对象分配内存。
再举个例子:
package main

import "fmt"

type MyMap struct {
        SingleMap mapstring
        Uname   string
        Uage      int
}

func main() {
        m := *new(MyMap)
        fmt.Println("uname:", m.Uage)
        m.SingleMap["uname"] = "lyl"
        fmt.Println(m)
} 我自界说了一个MyMap,通过new初始化后,往这个map的SingleMap里添加元素的时间报错了,由于SingleMap还没有初始化。
https://i-blog.csdnimg.cn/direct/9500979270824864821d256a19673ac6.png








免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: go语言中new和make的区别