Golang的make和new的区别?
  0SnbOly3LC5t 2023年11月15日 24 0


  1. new 和 make 都是在堆上分配内存,内存逃逸不讲,当然也可以了解一下。
  2. new 对指针类型分配内存,返回值是分配类型的指针,new也可以对 slice 、map、channel 分配内存;
  3. make 仅用于 slice、map和 channel 的初始化,返回值为类型本身,而不是指针;

在Go语言中,makenew是两个用于创建对象的内建函数,它们有不同的用途和行为。

  1. makemake函数用于创建切片、映射和通道等引用类型的对象。它的语法是:make(T, args...),其中T表示要创建的对象的类型,args...表示传递给创建对象的参数。make函数会分配内存并初始化对象,返回一个已经准备好使用的引用类型对象。例如:
slice := make([]int, 5)          // 创建长度为5的整型切片
dictionary := make(map[string]int) // 创建字符串到整型的映射
channel := make(chan int)          // 创建一个整型通道
  1. newnew函数用于创建值类型的对象,并返回对象的指针。它的语法是:new(T),其中T表示要创建的对象的类型。new函数会分配内存,初始化该类型的零值,并返回指向该类型的指针。例如:
var count *int
count = new(int) // 创建一个整型对象,并将指针赋值给count变量

使用new函数创建的对象是该类型的指针,需要通过解引用(*)操作符访问该对象的值。new函数适用于创建结构体、基本类型(如整型、浮点型等)的对象。

总结:

  • make函数用于创建切片、映射和通道等引用类型的对象,并返回一个已初始化的对象。
  • new函数用于创建值类型的对象,并返回一个指向该类型的指针,指向的对象会被初始化为零值。

需要根据具体的需求和对象类型选择使用make还是new函数。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
0SnbOly3LC5t