GolangError指南(二) first argument to append must be slice; have *[]int

GolangError指南(二) first argument to append must be slice; have *[]int

GolangError 防踩坑,无法将 'list' (类型 *[]int) 用作类型 []Type


一、Golang Error?

Go 语言自发布以来,一直以高性能、高并发著称。不过,任何事情都有两面性。一门语言,有它值得骄傲的优点,也必定都会存在编译报错的情况。

  • panic 这个词,在英语中具有恐慌、恐慌的等意思。在 Go 语言中,也代表极其严重的问题,意味着程序的结束并退出。

Go 语言中 panic 关键字主要用于主动抛出异常。

  • recover 这个词,在英语中具有恢复、复原等意思。在 Go 语言中,代表将程序状态从错误中恢复到正常状态。

Go语言中 recover 关键字主要用于捕获异常,让程序回到正常状态。

二、错误原因

1.错误代码

new一般用于类型的内存分配,并且内存置为零。也就是类型的零值,即 string 为 “”,int 为 0, bool 为 false,new返回的是指向类型的指针。slice、map、channel等类型属于引用类型,引用类型初始化为nil,nil是不能直接赋值的,也不能用new分配内存,还需要使用make来分配:

	// error
	list := new([]int)
	// new一般用于类型的内存分配,并且内存置为零。
	// 也就是类型的零值,即 string 为 "",int 为 0, bool 为 false,
	// new返回的是指向类型的指针。
	// slice、map、channel等类型属于引用类型,引用类型初始化为nil,
	// nil是不能直接赋值的,也不能用new分配内存,还需要使用make来分配
	list = append(list, 1)
	fmt.Println(list)

2.较差代码

make只用于slice、map以及channel的初始化(非零值)。 make 分配空间后,会进行初始化。 make返回的还是这三个引用类型本身。:

	// perfect
	list:=make([]int,0) list
	// make只用于slice、map以及channel的初始化(非零值)。
	// make 分配空间后,会进行初始化。
	// make返回的还是这三个引用类型本身。
	list = append(list, 1)
	fmt.Println(list)

总结

Golang 通过make和new来分配内存的,但是它们之间还是有些区别的。简单来说,new只是分配内存,不初始化内存; 而make即分配又初始化内存。所谓的初始化就是给类型赋初值。

希望这个博客能对你有所益处。我是轻王,我为自己代言。

猜你喜欢

转载自blog.csdn.net/moer0/article/details/123390070