4、Golang中make与new有何区别?
本文主要给大家介绍了Go语言中函数new
与make
的使用和区别,关于Go语言中new
和make
是内建的两个函数,主要用来创建分配类型内存。在我们定义生成变量的时候,可能会觉得有点迷惑,其实他们的规则很简单,下面我们就通过一些示例说明他们的区别和使用。
var i int var s string
变量的声明我们可以通过var关键字,然后就可以在程序中使用。当我们不指定变量的默认值时,这些变量的默认值是他们的零值,比如int类型的零值是0,string类型的零值是""
,引用类型的零值是nil
。
对于例子中的两种类型的声明,我们可以直接使用,对其进行赋值输出。但是如果我们换成指针类型呢?
test1.go
package main import ( "fmt" ) func main() { var i *int *i=10 fmt.Println(*i) }
$ go run test1.go panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x4849df] goroutine 1 [running]: main.main() /home/itheima/go/src/golang_deeper/make_new/t
从这个提示中可以看出,对于引用类型的变量,我们不光要声明它,还要为它分配内容空间,否则我们的值放在哪里去呢?这就是上面错误提示的原因。
对于值类型的声明不需要,是因为已经默认帮我们分配好了。
要分配内存,就引出来今天的new
和make
。
对于上面的问题我们如何解决呢?既然我们知道了没有为其分配内存,那么我们使用new分配一个吧。
func main() { var i *int i=new(int) *i=10 fmt.Println(*i) }
现在再运行程序,完美PASS,打印10。现在让我们看下new这个内置的函数。
// The new built-in function allocates memory. Th