文章目录

  • 直接var
  • make
  • new
  • 小结

直接var

func main(){var sli []intfmt.Println(sli)                    // 打印结果为:[]fmt.Println(len(sli))             // 打印结果为:0fmt.Println(cap(sli))              // 打印结果为:0fmt.Println(sli[0])                    // panic: index out of range [0] with length 0
}

此时sli只分配了这个切片结构,还没有分配底层数组,存储元素个数0容量也为0

make

var sli []int = make([]int,2,5)

此时make不仅会为sli分配这个切片结构,还会开辟一段内存作为sli的底层数组,并将底层数组的值初始化为整型的默认值0

向sli中新增一个元素3

var sli []int = make([]int,2,5)
sli = append(sli,3)


注意:make只能用来为slice、map、channel类型分配内存和初始化一个对象

new

func main(){sli := new([]int)fmt.Println(*sli)          // 打印为:[]fmt.Println(len(*sli))      // 打印为:0fmt.Println(cap(*sli))       // 打印为:0fmt.Println((*sli)[0])       // panic: index out of range [0] with length 0
}

此时new会为sli指向一个没有分配底层数组的切片结构,存储元素个数容量都为0

小结

  1. make既分配内存,也初始化内存。new只是将内存清0,并没有初始化内存
  2. make返回的是引用类型本身。new返回的是指向类型的指针
  3. make只能用来分配及初始化slice、map、channel。new可以分配任意类型的数据

go中make、new和直接var的区别相关推荐

  1. Ubuntu中Could not get lock /var/lib/dpkg/lock解决方案

    关于Ubuntu中Could not get lock /var/lib/dpkg/lock解决方案 转载于:https://www.cnblogs.com/daemonFlY/p/10916812. ...

  2. JS中 let 和var的区别

    JS中let和var 的区别 简单介绍let var的常见变量提升 ES6可以用let定义块级作用域变量 let配合for循环的独特应用 let没有变量提升与暂时性死区 let变量不能重复声明 简单介 ...

  3. 在Javascript中 声明时用var与不用var的区别,== 和 ===的区别

    今天,被问到两个JS问题,当时没回答到重点,问题虽然看起来简单,但是细节却马虎不得,在此做下记录: 1. 在Javascript中 声明时用"var"与不用"var&qu ...

  4. uniapp 获取到js文件var一个变量怎么获取到这个变量值_浅析Js中const,let,var的区别及作用域...

    理解:let变量的作用域只能在当前函数中 js中const,let,var的区别及作用域_lianzhang861的博客-CSDN博客​blog.csdn.net 全局作用域中,用 const 和 l ...

  5. javascript中let和var的区别

    let是es6中新增命令,也是用来声明变量的,可能很多小伙伴都像我一样,定义变量的时候都会用var而很少用到let,那么,let和var到底有什么区别呢? let和var的区别体现在作用域上.var的 ...

  6. JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)

    文章目录 1. 新语法结构 1.1 Java的REPL工具: jShell命令 1.2 异常处理之try-catch资源关闭 1.3 局部变量类型推断 1.4 instanceof的模式匹配 1.5 ...

  7. html5有foreach吗,JavaScript中的map()和forEach()有什么区别?

    来源:https://medium.com/better-programming,作者:Moon,翻译:公众号<前端全栈开发者> JavaScript中一些最受欢迎的功能可能是map和fo ...

  8. [译]JavaScript中的属性:定义和赋值的区别

    原文:http://www.2ality.com/2012/08/property-definition-assignment.html 你知道吗?定义一个属性和为一个属性赋值是有区别的.本文解释了两 ...

  9. 在React / React Native中使用构造函数与getInitialState有什么区别?

    本文翻译自:What is the difference between using constructor vs getInitialState in React / React Native? I ...

最新文章

  1. redis源码之sds
  2. 在Oracle 11g中用看Oracle的共享内存段---------IPCS
  3. 如何优雅的激怒C/C++程序员
  4. 业余爱好者linux_如何从业余爱好者变成专业开发人员
  5. (转)女生应该找一个玩ACM的男生
  6. 数据库事务的概念及其实现原理
  7. hdu 1872 稳定排序
  8. 犯病的chorme(谷歌浏览器)之css加载失败
  9. react生命周期(自己的方式理解)
  10. SAP License:财务帐与后勤不一致情况
  11. python循环套循环,零基础学python 14 循环套循环:循环的嵌套(课后习题)
  12. python定义模块结束语_python-模块定义、导入、优化
  13. 怎么打开/查看MySQL的SQL记录
  14. linux如何检查进程,如何在Linux中检查进程的执行时间
  15. 华为裸金属服务器 虚拟化性能下降,服务器虚拟化 配置
  16. Linux 命令整理-tailf
  17. PDF怎么转换成Word文字
  18. 3个重点,20个函数分析,浅析FFmpeg转码过程
  19. HTML基础_3_HTML元素周期表
  20. 2017-9-13 NOIP模拟赛[xxy]

热门文章

  1. HDFS DataNode 设计实现解析
  2. android 类ios actionsheet效果
  3. Oracle RAC更改VIP IP地址_2节点的实验
  4. Study on Android【五】--自定义ContentProvider的语义
  5. php datediff 函数,dateAdd与DateDiff函数的js代码
  6. rabbitmq可靠性投递_阿里Java研发二面:了解RabbitMQ?说说RabbitMQ可靠性投递
  7. 四参数拟合曲线_每周放送|曲线拟合
  8. python桌面开发吐血_想用java写个桌面小demo,就布局都差点写吐血了,学艺不精...
  9. php 链接远程oracle,PHP连接远程oracle输出数据
  10. MS的完整形式是什么?