Golang new 和 make 的区别
Posted Golang语言社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang new 和 make 的区别相关的知识,希望对你有一定的参考价值。
共 1522 字,阅读需 4 分钟
Go提供了两种分配原语,即new
和make
。它们所做的事情是不一样的,所应用的类型也不同。
make的目的不同于new,它只用于slice,map,channel
的创建,并返回类型为T(非指针)的已初始化(非零值)的值;出现这种差异的原因在于,这三种类型本质上为引用类型,它们在使用前必须初始化;
小结
new
和make
都在堆上分配内存,但是它们的行为不同,适用于不同的类型。
make(T)
返回一个类型为 T 的初始值,它只适用于3种内建的引用类型:slice、map
和 channel
。
换言之,new 函数分配内存,make 函数初始化;下图给出了区别:
通过实验,可以更直观的查看两者之间的区别
package main
import "fmt"
func main() {
p := new([]int) //p == nil; with len and cap 0
fmt.Println(p)
v := make([]int, 10, 50) // v is initialed with len 10, cap 50
fmt.Println(v)
/*********Output****************
&[]
[0 0 0 0 0 0 0 0 0 0]
*********************************/
(*p)[0] = 18 // panic: runtime error: index out of range
// because p is a nil pointer, with len and cap 0
v[1] = 18 // ok
}
以上是关于Golang new 和 make 的区别的主要内容,如果未能解决你的问题,请参考以下文章