new 和 make 都是用来分配内存的
var a int
fmt.Println(a)
var b string
b = "927"
fmt.Println(b)
//输出
//0
//927
使用基本类型系统会默认分配内存 基本类型在创建的时候就有了默认值
var a *string
*a = "927"
fmt.Println(a)
var m map[string]int
m["id"] = 927
fmt.Println(m)
//panic: runtime error: invalid memory address or nil pointer dereference
//[signal 0xc0000005 code=0x0 addr=0x0 pc=0x49dd4a]
//
//goroutine 1 [running]:
//main.main()
// E:/goworkspace/github.com/godemo/01/main.go:8 +0x2a
如果在使用 指针类型和引用类型时候 没有分配内存空间 则
panic: runtime error: invalid memory address or nil pointer dereference
new
使用new函数得到的是一个类型的指针,值为此类型的默认值。
new(Type)
new 函数比较少用
var a = new(int)
fmt.Println(*a)
*a = 927
fmt.Println(*a)
//输出
//0
//927
make
make也是用于内存分配的
用于slice、map以及chan的内存创建
slice、map以及chan 本就是引用类型 所以没有必要返回指针
make( tyep, size)
var m = make(map[string]int,20)
m["id"] = 927
fmt.Println(m)
//输出
//map[id:927]
new和make的区别
1.new比较少用
2.make只用于slice、map以及chan的内存分配
3.new返回的是指针类型,make是返回该类型的本身