1、當向切片新加入數據,原切片數據加上新數據長度不超過切片容量時,直接加入切片末尾,容量大小不變. 2、當加入新的數據後,數據長度超出原切片的容量大小2倍,則切片的容量會是數據長度(偶數)或數據長度(奇數)+1. 3、當加入新的數據後,數據長度未超出原切片的容量大小2倍,則切片的容量擴充一倍. ca ...
1、當向切片新加入數據,原切片數據加上新數據長度不超過切片容量時,直接加入切片末尾,容量大小不變.
2、當加入新的數據後,數據長度超出原切片的容量大小2倍,則切片的容量會是數據長度(偶數)或數據長度(奇數)+1.
3、當加入新的數據後,數據長度未超出原切片的容量大小2倍,則切片的容量擴充一倍.
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func main() { 8 var arr = [20]int{1, 2, 34, 5, 5, 5, 5, 667, 7} 9 a1 := arr[:3:3] 10 a11 := arr[:3:3] 11 12 fmt.Printf("cap(a1)=%d,len(a1)=%d\n", cap(a1), len(a1)) 13 14 var a2 = []int{1, 2, 2, 3} 15 a1 = append(a1, a2...) //總數據長度是7,容量擴容2倍裝不下 2*3=6 16 //長度是數據長度7+1=8 17 //數據長度是奇數,容量為數據長度+1; 18 //數據長度是偶數,容量為數據長度 19 var a22 = []int{1, 2, 2, 3, 4} 20 a11 = append(a11, a22...) 21 fmt.Printf("cap(a1)=%d,len(a1)=%d\n", cap(a1), len(a1)) 22 fmt.Printf("cap(a11)=%d,len(a11)=%d\n", cap(a11), len(a11)) 23 24 a3 := arr[:3:6] //容量6 25 fmt.Printf("cap(a3)=%d,len(a3)=%d\n", cap(a3), len(a3)) 26 27 a3 = append(a3, a2...) //總數據長度是7,容量擴容2倍可以裝下 2*6=12 28 fmt.Printf("cap(a3)=%d,len(a3)=%d\n", cap(a3), len(a3)) 29 30 }
輸出
cap(a1)=3,len(a1)=3
cap(a1)=8,len(a1)=7
cap(a11)=8,len(a11)=8
cap(a3)=6,len(a3)=3
cap(a3)=12,len(a3)=7