内存,这称为扩容,扩容会改变元素原来的位置。
扩容策略并不是简单的扩为原切片容量的 2
倍或 1.25
倍,还有内存对齐的操作。扩容后的容量 >= 原容量的 2
倍或 1.25
倍。
当直接用切片作为函数参数时,可以改变切片的元素,不能改变切片本身;想要改变切片本身,可以将改变后的切片返回,函数调用者接收改变后的切片或者将切片指针作为函数参数。
最后,如果你觉得本文对你有帮助的话,帮我点一下右下角的“推荐”吧,感谢!
参考资料
【码洞《深度解析 Go 语言中「切片」的三种特殊状态》】https://juejin.im/post/5bea58df6fb9a049f153bca8
【老钱 数组】https://juejin.im/post/5be53bc251882516c15af2e0
【老钱 切片】https://juejin.im/post/5be8e0b1f265da614d08b45a
【golang interface源码】https://i6448038.github.io/2018/10/01/Golang-interface/
【golang interface源码】http://legendtkl.com/2017/07/01/golang-interface-implement/
【interface】https://www.jishuwen.com/d/2C9z#tuit
【雨痕开源Go学习笔记】https://github.com/qyuhen/book
【slice 图很漂亮】https://halfrost.com/go_slice/
【Golang Slice的扩容规则】https://jodezer.github.io/2017/05/golangSlice%E7%9A%84%E6%89%A9%E5%AE%B9%E8%A7%84%E5%88%99
【slice作为参数】https://www.cnblogs.com/fwdqxl/p/9317769.html
【源码】https://ictar.xyz/2018/10/25/%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BA-go-slice/
【append机制 译文】https://brantou.github.io/2017/05/24/go-array-slice-string/
【slice 汇编】http://xargin.com/go-slice/
【slice tricks】https://colobu.com/2017/03/22/Slice-Tricks/
【有图】https://i6448038.github.io/2018/08/11/array-and-slice-principle/
【slice的本质】https://www.flysnow.org/2018/12/21/golang-sliceheader.html
【slice使用技巧】https://blog.thinkeridea.com/201901/go/slice_de_yi_xie_shi_yong_ji_qiao.html
【slice/array、内存增长】https://blog.thinkeridea.com/201901/go/shen_ru_pou_xi_slice_he_array.html