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即分配又初始化内存。所谓的初始化就是给类型赋初值。
希望这个博客能对你有所益处。我是轻王,我为自己代言。