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用法介绍。