【append对len和cap的影响】怀抱观古今,寝食展戏谑。这篇文章主要讲述append对len和cap的影响相关的知识,希望能为你提供帮助。
package mainimport "
fmt"
func main() {
var numbers []int
printSlice(numbers) /* 允许向空切片追加元素 */
numbers = append(numbers, 0)
printSlice(numbers) /* 向切片添加一个元素 */
numbers = append(numbers, 1)
printSlice(numbers) /* 再向切片添加一个元素 */
numbers = append(numbers, 1)
printSlice(numbers) /* 同时添加多个元素 */
numbers = append(numbers, 2,3,4)
printSlice(numbers)}
func printSlice(x []int){
fmt.Printf("
len=%d cap=%d slice=%v
"
,len(x),cap(x),x)
}
Output:
len=0 cap=0 slice=[]
len=1 cap=1 slice=[0]
len=2 cap=2 slice=[0 1]
len=3 cap=4 slice=[0 1 1]
//上面:每次cap改变的时候指向numbers内存的指针都在变化。当在使用 append 的时候,如果 cap==len 了这个时候就会新开辟一块更大内存,然后把之前的数据复制过去(实际go在append的时候放大cap是有规律的。在 cap 小于1024的情况下是每次扩大到 2 * cap ,当大于1024之后就每次扩大到 1.25 * cap 。所以上面的测试中cap变化是 1, 2, 4, 8)。
//下面:len=3+3 cap=4+4
len=6 cap=8 slice=[0 1 1 2 3 4]
推荐阅读
- 《APP》团队冲刺第二阶段 六
- win8/win10系统安装程序软件出现不兼容现象怎样办
- win8系统怎样打开或关闭系统保护技巧|win8打开或禁用系统保护技巧的办法
- win8.1如何增加c盘空间|win8.1扩展c盘空间的办法
- win8系统怎样将应用程序固定到任务栏
- 升级Win 8系统后播放器出现绿屏的处理办法
- Win8系统电脑安装iTunes出现出错2503如何处理
- Win10设备销售颓势能否突破Win8/Win 8系统
- Win 8系统出现蓝屏出错代码0x0000007F怎样办