虽然是4年了,但偶尔还是会弄混slice与数组,以致于有时候slice做参数传递时,导致一些不期望的结果发生。例如用slice做参数传递后,下层对slice进行相关更改,有时候生效,有时候不生效的问题。
如下代码:
```
func main() {
a := make([]int, 4, 5)
for i := 0; i < 4; i++ {
a[i] = i + 1
}
logger.Infof("a :%v", a)
aaa(a)
logger.Infof("a :%v len:%d", a, len(a))
}
func aaa(array []int) {
array = append(array, 5)
logger.Infof("array :%v len:%d", array, len(array))
array[1] = 0
}
```
输出:
a :[1 2 3 4]
array :[1 2 3 4 5] len:5
a :[1 0 3 4] len:4
在使用slice的时候,我们就要忘记数组,要记住slice的原理,slice本质也是一个结构体,只是语言进行了相当于语法糖方式的优化,使其使用起来像数组一样。但实际进行参数传递时和结构体的性质是一样的。
有疑问加站长微信联系(非本文作者)