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即分配又初始化内存。所谓的初始化就是给类型赋初值。

希望这个博客能对你有所益处。我是轻王,我为自己代言。
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫轻王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值