go语言关于切片常见陷阱

package main

import "fmt"

func foo2(arr []int)  {
	arr[1]=233
	fmt.Println(arr)
}

func main() {
	//通过函数传递,可以实现切片引用传递,然后通过append才能添加数据,添加数据后必须返回
	var a []int=[]int{3,4,5}
	fmt.Println(a)
	foo2(a)
	fmt.Println(a)

}

结果为:
[3 4 5]
[3 233 5]
[3 233 5]

从上面的例子中,可以看出,通过函数传递切片,能够修改主调函数中切片的值。
但是,对于切片的增加数据操作,则不行。

package main

import "fmt"

func foo2(arr []int)  {
	arr=append(arr, 4)
	fmt.Println(arr)
}

func main() {
	//通过函数传递,可以实现切片引用传递,然后通过append才能添加数据,添加数据后必须返回
	var a []int=[]int{3,4,5}
	fmt.Println(a)
	foo2(a)
	fmt.Println(a)

}

结果为:
[3 4 5]
[3 4 5 4]
[3 4 5]

通过上面的例子可以得出结论:在函数参数传递的时候,对于切片中值得修改操作时,可以改变切片。但是对切片中的大小,增加数据时,不能改变原切片。这种情形下必须使用返回值进行返回切片,才能得到修改后的切片。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值