当前位置: 首页 > news >正文

GO语言中make与new的区别

区别

  • 1 make不仅分配内存,还会初始化。 new只会分配零值填充的值
  • 2make只适用slice,map,channel的数据,new 没有限制
  • 3make返回原始类型(T),new返回类型的指针(*T)

源码中定义的区别
func make(t Type,size …IntegerType) Type
func new(Type) *Type

func main() {//声明切片slice1并申请地址,为申请的10个元素都赋上元素类型的零值var slice1 = make([]int, 10)fmt.Println(slice1, len(slice1), cap(slice1)) //10 10var slice2 = new([]int)fmt.Println(slice2, len(*slice2), cap(*slice2))s1 := make([]int, 0)fmt.Println("s1", len(s1), cap(s1))s2 := new([]int)s3 := *new([]int)var s4 []intvar s5 = []int{}//fmt.Println("s1 is nil?", s1 == nil)  //falsefmt.Println("s2 is nil?", *s2 == nil) //truefmt.Println("s3 is nil?", s3 == nil)  //truefmt.Println("s4 is nil?", s4 == nil)  //truefmt.Println("s5 is nil?", s5 == nil)  //falsea1 := *new([10]int)a2 := [10]int{}fmt.Println(a1, a2)
}	

总结

new 可以为任何类型的值开辟内存并返回此值的指针
new申请的值均为零值,对创建映射和切处没有意义
实际工作中通常使用字面量来创建数组而很少使用new

相关文章:

  • 数据库软题1-数据模型+数据库三级模式两级映像
  • 信息安全管理工程师(工信部教育与考试中心)
  • HTTP 与 HTTPS 的三次握手与四次挥手详解
  • android.bp cc_defaults
  • react中的ref三种形式
  • 单细胞miloR分析(基于 KNN 图的细胞差异丰度分析方法)
  • 初始C++模板
  • Solidity智能合约中的异常处理(error、require 和 assert)
  • 【CAM350】使用总结 <一>{ 光绘Gerber 对齐 }
  • 【JavaScript】尾递归优化
  • BaoStock 的安装
  • 内网攻击思路流程与信息收集
  • 【Element-UI】实现el-drawer抽屉的左右拖拽宽度
  • Docker torchserve workflow部署流程
  • 数据文件(0)
  • android图片蒙层
  • Centos6.8 使用rpm安装mysql5.7
  • co模块的前端实现
  • es6要点
  • flask接收请求并推入栈
  • GraphQL学习过程应该是这样的
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • PHP的Ev教程三(Periodic watcher)
  • react 代码优化(一) ——事件处理
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • React-Native - 收藏集 - 掘金
  • tweak 支持第三方库
  • ⭐ Unity + OpenCV 实现实时图像识别与叠加效果
  • 闭包--闭包作用之保存(一)
  • 搞机器学习要哪些技能
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 前端存储 - localStorage
  • 温故知新之javascript面向对象
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #HarmonyOS:基础语法
  • $jQuery 重写Alert样式方法
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (十七)Flink 容错机制
  • (算法)大数的进制转换
  • (算法)区间调度问题
  • (原)Matlab的svmtrain和svmclassify
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • *上位机的定义
  • .DFS.
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET连接MongoDB数据库实例教程
  • .net中调用windows performance记录性能信息
  • 。Net下Windows服务程序开发疑惑
  • :如何用SQL脚本保存存储过程返回的结果集
  • :中兴通讯为何成功