slice :=[low:hight:max]
low:起始位置
hight:結束位置
max:最大位置
容量:cap(slice) = max - low
長度:len(slice) = hight - low
slice := [len]型別 //len不填寫 預設取初始化長度
eg:slice := [5]int // 長度為5,容量為5
slice := make(型別,len,cap) //len-長度 cap-容量
eg: slice := make(int,5,6) //長度為5 容量為6,int預設填充0
slice := male(int,5) //長度為5,容量5(預設取長度值)
slice := int //長度6 容量6
s := slice[1:3:4] //1-從原切片下標為1的元素起 3-擷取到下標為3的元素前乙個 4-擷取後s的容量
fmt.println("cap:", cap(s)) // 列印值為 cap:3
fmt.println("len:", len(s)) // 列印值為 len:2
fmt.println("s:", s) // 列印值為 s:[2,3]
s := slice[1:3]
fmt.println("cap:", cap(s)) // 列印值為 cap:5 原陣列的容量- low(1)
fmt.println("len:", len(s)) // 列印值為 len:2
fmt.println("s:", s) // 列印值為 s:[2,3]
s := slice[:3] // 等價於 s := slice[0:3]
fmt.println("cap:", cap(s)) // 列印值為 cap:6 原陣列的容量- low(0)
fmt.println("len:", len(s)) // 列印值為 len:3
fmt.println("s:", s) // 列印值為 s:[1,2,3]
slice := int //長度6 容量6
fmt.println("slice:", slice) // 輸出:[1,2,3,4,5,6,7]
fmt.println("len:", len(slice)) // 輸出:len:7
fmt.println("cap:", cap(slice)) // 輸出:len:12 容量不夠時,以兩倍原容量擴容
1、cap(slice)容量小於1024,乘以2擴容;cap(slice)容量 大於1024,增長乘以1.25擴容。
2、計算擴容時,計算後容量小於原容量,則不進行擴容,切片首位址保持不變,計算後容量超過原容量,開闢新記憶體,拷貝原切片資料到新的記憶體塊,原切片資料不變。
copy(目標切片,源切片)
slice := int //長度6 容量6
s := make(int,3)
copy(s, slice)
fmt.println("s:", s) //輸出:[1,2,3]
s := make(int,6)
copy(s, slice)
fmt.println("s:", s) //輸出:[1,2,3,4,5,6]
s := make(int,7)
copy(s, slice)
fmt.println("s:", s) //輸出:[1,2,3,4,5,6,0] 最後空一位初始化值 0
go語言基礎 切片 slice
理解為變長的陣列 a 切片建立 s1 int s2 make t,len,cap arr 5 int s3 arr start end 切割陣列 start,end s4 arr b 切片的型別 資料型別 切片屬於引用型別 s1 int s2 s1 packagemain import fmt fu...
Go語言切片 Slice
python裡面切片是一種操作,用於取list裡面元素。而go語言的切片則是一種資料型別,而不是一種操作。go語言中提供了切片 slice 作為一種更為靈活 功能強悍的內建型別,它其實是陣列的一種抽象。切片的原始碼 type slice struct slice是原陣列在記憶體中的位址的乙個指標,它...
Go語言核心 slice切片
slice是長度可變的元素序列 陣列不可變 每個元素都有相同的型別。slice型別寫作t,其中t代表slice中的元素型別 slice和陣列寫法很像,只是沒有指定長度。陣列和slice之間的聯絡非常緊密。slice是非常輕量的資料結構,它是引用型別,指向底層的乙個陣列,該陣列被稱之為slice的底層...