make、new操作

make用于内建类型(map、slice 和channel)的内存分配。new用于各种类型的内存分配。 (推荐学习:go)

内建函数new本质上说跟其它语言中的同名函数功能一样:new(T)分配了零值填充的T类型的内存空间,并且返回其地址,即一个*T类型的值。

用Go的术语说,它返回了一个指针,指向新分配的类型T的零值。有一点非常重要:

new返回指针。

内建函数make(T, args)与new(T)有着不同的功能,make只能创建slice、map和channel,并且返回一个有初始值(非零)的T类型,而不是*T。本质来讲,导致这三个类型有所不同的原因是指向数据结构的引用在使用前必须被初始化。

例如,一个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)    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(len(map1))

输出:

map[]false&map[]falsemap[]truemap[bbb:BBB ccc:CCC aaa:AAA]Success: process exited with code 0.

更多相关文章

  1. golang如何判断数据类型
  2. golang数据类型有哪些
  3. golang 如何类型转换
  4. go语言数据类型转换教程
  5. Go语言结构体与初始化图文详解
  6. golang怎么把字符串转成Int类型
  7. golang判断错误类型的方法
  8. 详解 Go 中的不可变类型
  9. 总结 Go 的数据类型

随机推荐

  1. android 只能输入数字和字母并且弹出数字
  2. Android Binder原理(一)学习Binder前必须要
  3. Android消息循环
  4. 系出名门Android(1) - 在 Windows 下搭建
  5. ch022 Android Handler
  6. 【Android布局】在程序中设置android:gra
  7. android分辨率适配
  8. android:gravity/android:layout_gravity
  9. Android开发经典书籍下载——《Android 4
  10. ch019 Android surfaceView