廢話
今天是所謂的520启泣,高富帥此刻正在xxx政基,我等屌絲在寫博客,悲哀呀胜蛉。挠进。
如題
//定義一個容量為5,長度為4的數(shù)組
slice := [5]int{10, 20, 30, 40}
//cap = 5 - 1
//len = 3 -1
//一個新的切片
newSlice := slice[1:3]
//增加兩個元素
//這些操作其實是在原有的數(shù)組上進行操作
//因為cap都在這個原有的數(shù)組范圍內(nèi)
newSlice = append(newSlice, 50, 60)
fmt.Printf("slice cap %d len %d, newSlice cap %d len %d \n", cap(slice), len(slice), cap(newSlice), len(newSlice))
//遍歷并打印出指針地址
for i1, v1 := range slice {
fmt.Println(i1, v1, &slice[i1])
}
fmt.Printf("slice cap %d len %d, newSlice cap %d len %d \n", cap(slice), len(slice), cap(newSlice), len(newSlice))
//遍歷并打印出指針地址
for i2, v2 := range newSlice {
fmt.Println(i2, v2, &newSlice[i2])
}
//重新增加元素
//此時已經(jīng)超出了原有的數(shù)組容量,那么會重新copy數(shù)組
//所以在性能要求高的場景謹慎使用append
newSlice = append(newSlice, 20, 60, 90)
fmt.Printf("slice cap %d len %d, newSlice cap %d len %d \n", cap(slice), len(slice), cap(newSlice), len(newSlice))
//遍歷并打印出指針地址
for i3, v3 := range newSlice {
fmt.Println(i3, v3, &newSlice[i3])
}
輸出結(jié)果
slice cap 5 len 5, newSlice cap 4 len 4
0 10 0xc820012270
1 20 0xc820012278
2 30 0xc820012280
3 50 0xc820012288
4 60 0xc820012290
slice cap 5 len 5, newSlice cap 4 len 4
0 20 0xc820012278
1 30 0xc820012280
2 50 0xc820012288
3 60 0xc820012290
slice cap 5 len 5, newSlice cap 8 len 7
0 20 0xc820016340
1 30 0xc820016348
2 50 0xc820016350
3 60 0xc820016358
4 20 0xc820016360
5 60 0xc820016368
6 90 0xc820016370