美文网首页
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