Go语言学习: new和make

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是返回该类型的本身

发布了11 篇原创文章 · 获赞 1 · 访问量 1254

猜你喜欢

转载自blog.csdn.net/ZHOUAXING/article/details/105044524