Golang | new和make方法的区别

Posted Parker@1989

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang | new和make方法的区别相关的知识,希望对你有一定的参考价值。

首先我们要知道new和make都是用来创建分配类型的内容,但是使用方法不一样。

new

首先我们用一个例子来看new的使用场景

var i int
var s sring

我们通过var关键字声明两个变量,当我们不指定变量的值的时候,变量默认是类型的零值,比如int类型的零值是0,string类型的零值是"",引用类型的零值是nil。
对于以上两种类型的声明,我们可以直接使用,因为默认就已经赋零值,那么引用类型我们是不是可以使用呢?

func main() 
	var sp *string
	*sp = "Golang"
	fmt.Println(*sp)

执行以上代码会不会输出”golang”呢?

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x10a6ec3]

运行报错,因为引用类型的变量我们不能只是声明,还需要为它分配内存空间,否则程序并不知道应该把赋值存储到哪个位置,所以需要我们提前分配一个内存空间。
我们改一下程序如下:

func main() 
	var sp *string
	sp = new(string)
	*sp = "Golang"
	fmt.Println(*sp)

再运行我们的程序,就可以看到输出结果了。
我们可以理解为new方法接收一个类型参数,然后分配内存,返回一个执行该类型内存地址的指针,同时把分配的内存置零,也就是为类型赋零值。

make

make也是为类型分配内存,但是和new不同,它只是为channel、slice和map类型创建内存,并返回这三个类型本身,而不是他们的指针类型,因为这三种类型本身就是引用类型。

这三种类型的结果比较复杂,比如slice要提前初始化好内部元素的类型、slice的长度和容量等,这样才可以使用。

以上是关于Golang | new和make方法的区别的主要内容,如果未能解决你的问题,请参考以下文章

golang:make和new的区别

Golang new 和 make 的区别

golang new make 区别

#yyds干货盘点#Golang make和new的区别详解

go语言的new和make

golang中指针,new和make函数作用