Go中的make与new

  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编程语言 欢迎来到 Go 编程语言指南。本指南涵盖了该语言的大部分重要特性 Go 语言的交互式简介,...
    Tuberose阅读 18,616评论 1 46
  • Hello World这是开发的一个开发魔咒,几乎所有人都是从这开始的,今天我也从魔咒开始先打印一份Hello W...
    cocoaAhda阅读 5,313评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,497评论 19 139
  • Go语言中的内建函数new和make是两个用于内存分配的原语(allocation primitives)。对于初...
    十月的阳光阅读 2,615评论 0 0
  • Go语言做Web编程非常方便,并且在开发效率和程序运行效率方面都非常优秀。相比于Java,其最大的优势就是简便易用...
    暗黑破坏球嘿哈阅读 12,940评论 6 66