美文网首页
Go中的make与new

Go中的make与new

作者: flow__啊 | 来源:发表于2017-03-29 22:26 被阅读41次
    1. make用于内建类型(map、slice 和channel)的内存分配。new用于各种类型的内存分配。make只能创建slice、map和channel,并且返回一个有初始值(非零)的T类型(引用),而不是*T

    2. 本质来讲,导致这三个内建类型有所不同的原因是:引用在使用前必须被初始化。例如,一个slice,是一个包含指向数据(内部array)的指针、长度和容量的三项描述符;在这些项目被初始化之前,slice为nil。对于slice、map和channel来说,make初始化了内部的数据结构,填充适当的值。make返回初始化后的(非零)值。

        var map1 map[string]string = make(map[string]string)
        fmt.Println(map1)
        fmt.Println(map1 == nil)
           //个人尝试做一些操作,发现什么都做不了
        var map2 *map[string]string = new(map[string]string)
        var map3 map[string]string =  map[string]string{"555":"444"}
    
        fmt.Println(map2)
        fmt.Println(map2 == nil)
        fmt.Println(*map2)
        fmt.Println(*map2 == nil)
        //    var map1 map[string]string
        map1["aaa"] = "AAA"
        map1["bbb"] = "BBB"
        map1["ccc"] = "CCC"
        fmt.Println(map1)
        fmt.Println(map1["5"])
        fmt.Println(map3["555"])
    
        fmt.Println(len(map1))
    //输出:
    /*
    map[]
    false
    &map[]
    false
    map[]
    true
    map[ccc:CCC aaa:AAA bbb:BBB]
    
    444
    3
    
    
    
    */
    

    相关文章

      网友评论

          本文标题:Go中的make与new

          本文链接:https://www.haomeiwen.com/subject/yawyottx.html