Go new 与 make
在Go语言中,"new"
和"make"
都是用于动态分配内存的关键字,但它们有不同的用途和区别。
-
"new"
: 在Go语言中,"new"
是一个内建函数,用于值类型(基本类型和用户定义的结构体类型)分配内存,并返回指向新分配的零值的指针。值类型是直接存储值的类型,比如int、float64、struct
等。"new"
函数返回的指针指向一个新分配的内存空间,其中所有的位都被设置为零值。
使用"new"
函数的语法如下:
ptr := new(Type)
其中,Type是要创建的值类型的名称,ptr是指向新分配内存的指针。
例如:文章来源:https://www.toymoban.com/news/detail-621556.html
ptr := new(int) // 分配一个int类型的零值,并返回指向该int的指针
需要注意的是,"new"
函数只分配内存,并不对初始化值进行初始化。对于引用类型(如slice
、map
和channel
)的初始化,应该使用"make"函数。
-
"make"
: 在Go语言中,"make"
是一个内建函数,用于创建引用类型(slice、map和channel)的实例,并进行初始化。引用类型是指向底层数据结构的指针,它们在使用前必须进行初始化。"make"
函数为引用类型分配内存,并进行一些内部设置,然后返回一个已初始化的引用类型的实例。
使用"make"
函数的语法如下:
slice := make([]Type, length, capacity)
mapVar := make(map[KeyType]ValueType)
channel := make(chan Type)
其中,Type是引用类型的元素类型,length是slice的长度,capacity是slice的容量,KeyType是map的键类型,ValueType是map的值类型,Type是channel的元素类型。
例如:
slice := make([]int, 5, 10) // 创建一个长度为5,容量为10的整数类型的slice
mapVar := make(map[string]int) // 创建一个string作为键,int作为值的map
channel := make(chan bool) // 创建一个传递bool类型数据的channel
总结区别:文章来源地址https://www.toymoban.com/news/detail-621556.html
-
"new"
函数用于值类型(基本类型和结构体类型)的内存分配,不会对对象进行初始化,返回指向零值的指针。 -
"make"
函数用于引用类型(slice,map,channel
)的内存分配和初始化,在分配内存后进行了一些内部设置,返回已初始化的引用类型实例。
到了这里,关于Go new 与 make的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!