go基礎之slice(切片)

2021-10-06 07:58:34 字數 1881 閱讀 6686

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的底層...