Go语言中var、new、make区别
Admin
2022-05-18 22:26:21
GoLang
在Go语言中可以使用var来声明一个变量,并指明变量的数据类型。通过var声明(包括结构体),系统会默认为他分配内存空间,并赋该类型的零值。声明一个指针类型的变量,系统不会为他分配内存,默认是nil。
new 和 make 都是用来内存分配的,make只能用于内建类型(map、slice、channel)的内存分配和初始化。new只分配内存,可以是任意的数据类型。
从返回值上来说make返回的是引用类型本身,而new返回的是类型的指针。
注意:
常见类型明确的场合下,使用短变量声明方式:=。
make 只能用来分配及初始化类型为 slice、map、chan 的数据。new 可以分配任意类型的数据。
new 分配返回的是指针,即类型 *Type。make 返回引用,即 Type。
new 分配的空间被清零。make 分配空间后,会进行初始化。
避免使用new,除非你需要一个指针变量。
例子1:
package main import "fmt" func main() { var p []string b := []string{} fmt.Println(p, b) }
例子2:
package main import ( "fmt" ) type A struct { Name string } func main() { p := new(A) p.Name = "ywfuns.com" fmt.Println(p) }
使用new初始化一个struct,返回的是一个指针。
new 函数只接受一个参数,这个参数是一个类型,并且返回一个指向该类型内存地址的指针。同时 new 函数会把分配的内存置为零,也就是类型的零值。
例子3:
package main import "fmt" func main() { p := make([]int,0) b :=[]int{} fmt.Println(p, b) }
make返回的类型就是类型本身,而不是他们的指针类型,因为是引用类型,所以就没有必要返回他们的指针了。