当前位置: 首页 > 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

http://www.lryc.cn/news/445693.html

相关文章:

  • 安全运维类面试题
  • STM32外设之LTDC/DMA2D—液晶显示(野火)
  • 调试vue build之后的js文件
  • Django一分钟:DRF快速实现JWT认证与RBAC权限校验
  • 面试题(六)
  • CSS 实现文本溢出省略号显示,含单行与多行文本溢出
  • Redis中String命令的基础操作
  • 策略模式+模版模式+工厂模式
  • 云计算平台层(PaaS)指的是什么?常见的应用场景盘点
  • 搜索引擎简介
  • 每天认识几个maven依赖(aislib+A1TRMI+Andromda+Annogen)
  • 每日算法1(快慢指针)
  • 基于RealSense D435相机简单实现手部姿态重定向
  • Linux下搭建iSCSI共享存储-Tgt
  • js中正则表达式中【exec】用法深度解读
  • Dockerfile的详解与案例
  • [spring]用MyBatis XML操作数据库 其他查询操作 数据库连接池 mysql企业开发规范
  • [产品管理-33]:实验室技术与商业化产品的距离,实验室技术在商业化过程中要越过多少道“坎”?
  • 【有啥问啥】 Self-Play技术:强化学习中的自我进化之道
  • LCR 008. 长度最小的子数组
  • uniApp 解决uniapp三方地图获取位置接口的请求次数限制问题,分别提供 Android 和 iOS 的实现方法(原生插件获取)
  • Zabbix Agent 监控 MySQL 进程状态
  • 【模型】感知器
  • HtmlCss 基础总结(基础好了才是最能打的)五
  • 图神经网络实战——分层自注意力网络
  • 基于深度学习的数字识别系统的设计与实现(python、yolov、PyQt5)
  • ChatGPT 提取文档内容,高效制作PPT、论文
  • 3、等保1.0 与 2.0 的区别
  • Angular面试题九
  • (转载)智能指针shared_ptr从C++11到C++20