不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

Golang踩坑集中整理

append(x,1)与x = append(x,1)的区别

今天有同事问我

1
2
3
4
5
x := make([]int,4,4)
x = append(x,1)
//append(x,1)

//两者有什么区别

我瞬间懵了,这不很明显吗?

x = append(x,1)是在x的原先基础上增加了一个元素,所以x中元素为5,而append(x,1)没有赋返回值,所以会报错!

同事说,这不是重点,我是问你append(x,1)x中的元素有几个。

于是,我想了下,同时也请教了他人,最终得出答案,x为4。

解释

append(x,1)之后相当于扩容,所以`append 的结果,底层会分配一个新的数组。

如果我不接收返回值,相当于还是append前,长度没变。
那么为什么要这样呢

此处引用polaris的解释

1
2
3
append 是 内置函数,必须要接收它的值。
由此看来 go安全性做的确实好
避免出现失误,没有将错误的append的结果保存

因此

x := make([]int,4,4)后,执行x = append(x,1),长度为5;执行append(x,1),长度为4.

注:可参考GO圣经中的Slice章节下的append用法介绍。

------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!