append(x,1)与x = append(x,1)的区别
今天有同事问我
1 | x := make([]int,4,4) |
我瞬间懵了,这不很明显吗?
x = append(x,1)
是在x
的原先基础上增加了一个元素,所以x
中元素为5,而append(x,1)
没有赋返回值,所以会报错!
同事说,这不是重点,我是问你append(x,1)
后x
中的元素有几个。
于是,我想了下,同时也请教了他人,最终得出答案,x
为4。
解释
append(x,1)之后相当于扩容,所以`append 的结果,底层会分配一个新的数组。
如果我不接收返回值,相当于还是append前,长度没变。
那么为什么要这样呢
此处引用polaris的解释
1 | append 是 内置函数,必须要接收它的值。 |
因此
在x := make([]int,4,4)
后,执行x = append(x,1)
,长度为5;执行append(x,1)
,长度为4.
注:可参考GO圣经中的Slice章节下的append用法介绍。