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

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 10

	var 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 []int
	var s5 = []int{}
	//
	fmt.Println("s1 is nil?", s1 == nil)  //false
	fmt.Println("s2 is nil?", *s2 == nil) //true
	fmt.Println("s3 is nil?", s3 == nil)  //true
	fmt.Println("s4 is nil?", s4 == nil)  //true
	fmt.Println("s5 is nil?", s5 == nil)  //false

	a1 := *new([10]int)
	a2 := [10]int{}
	fmt.Println(a1, a2)
}	

总结

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


http://www.kler.cn/news/328233.html

相关文章:

  • AI文本生成UI稿神器Galileo,程序员做独立开发必备
  • 【Linux-基础IO】如何理解Linux下一切皆文件磁盘的介绍
  • 链表的底层实现(Java版)(单向,双向,循环)
  • 2024年云南省职业院校技能大赛-云计算应用
  • ECMAScript标准
  • 【Android 14源码分析】Activity启动流程-1
  • 15分钟学 Python 第31天 :Web Scraping
  • java通过redis完成幂等性操作
  • Invalid row number (65536) outside allowable range (0..65535)
  • thinkphp6开发的通用网站系统源码
  • UI设计师面试整理-问题应对策略
  • Python从入门到高手4.1节-掌握条件控制语句
  • Rockchip RK3588 Android SDK编译方法
  • JWT(JSON Web Token)的介绍
  • 物理学基础精解【41】
  • 上位机图像处理和嵌入式模块部署(软硬结合才是嵌入式的精髓)
  • Elasticsearch基础_2.数据类型
  • python网站创建001:内容概览
  • 机器学习常用的评价指标原理和代码
  • 支持分页的环形队列
  • SqlSugar使用
  • JMeter 性能测试基本过程及示例
  • Spring Web MVC课后作业
  • [前端][easyui]easyui select 默认值
  • Java 编码系列:泛型详解与面试题解析
  • 探索Android折叠屏设备的分屏适配
  • 熔断降级 请求合并 请求缓存 线程池隔离 信号量隔离 openfeign整合Hystrix
  • 2024年10月CISAW课程安排
  • 预处理详解
  • 深入浅出MongoDB(三)