Go語言14 切片 Slice

2021-10-08 18:55:28 字數 2580 閱讀 7374

go 語言切片是對陣列的抽象。

go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片("動態陣列"),與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。

你可以宣告乙個未指定大小的陣列來定義切片:

var identifier type
切片不需要說明長度。

或使用make()函式來建立切片:

var slice1 type = make(type, len)

也可以簡寫為

slice1 := make(type, len)

也可以指定容量,其中capacity為可選引數。

make(t, length, capacity)
這裡 len 是陣列的長度並且也是切片的初始長度。

s := int
直接初始化切片,表示是切片型別,初始化值依次是1,2,3.其cap=len=3

s := arr[:]
初始化切片s,是陣列arr的引用

s := arr[startindex:endindex]
將arr中從下標startindex到endindex-1 下的元素建立為乙個新的切片

s := arr[startindex:]
預設endindex時將表示一直到arr的最後乙個元素

s := arr[:endindex]
預設startindex時將表示從arr的第乙個元素開始

s1 := s[startindex:endindex]
通過切片s初始化切片s1

s :=make(int,len,cap)
通過內建函式make()初始化切片s,int 標識為其元素型別為int的切片

切片是可索引的,並且可以由 len() 方法獲取長度。

切片提供了計算容量的方法 cap() 可以測量切片最長可以達到多少。

以下為具體例項:

package main

import "fmt"

func main()

func printslice(x int)

執行結果:

乙個切片在未初始化之前預設為 nil,長度為 0,例項如下:

package main

import "fmt"

func main() }

func printslice(x int)

執行結果:

可以通過設定下限及上限來設定擷取切片 [lower-bound:upper-bound],例項如下:

package main

import "fmt"

func main()

printslice(numbers)

//列印原始切片

fmt.println("numbers ==", numbers)

//列印子切片從索引1(包含) 到索引4(不包含)

fmt.println("numbers[1:4] ==", numbers[:3])

//預設上限為 len(s)

fmt.println("numbers[4:] ==", numbers[4:])

numbers1 := make(int, 0, 5)

printslice(numbers1)

//列印子切片從索引 0(包含) 到索引 2(不包含)

numbers2 := numbers[:2]

printslice(numbers2)

//列印子切片從索引 2(包含) 到索引 5(不包含)

numbers3 := numbers[2:5]

printslice(numbers3)}

func printslice(x int)

執行結果:

如果想增加切片的容量,我們必須建立乙個新的更大的切片並把原分片的內容都拷貝過來。

package main

import "fmt"

func main()

func printslice(x int)

執行結果:

參考:

Go語言切片 Slice

python裡面切片是一種操作,用於取list裡面元素。而go語言的切片則是一種資料型別,而不是一種操作。go語言中提供了切片 slice 作為一種更為靈活 功能強悍的內建型別,它其實是陣列的一種抽象。切片的原始碼 type slice struct slice是原陣列在記憶體中的位址的乙個指標,它...

Go語言核心 slice切片

slice是長度可變的元素序列 陣列不可變 每個元素都有相同的型別。slice型別寫作t,其中t代表slice中的元素型別 slice和陣列寫法很像,只是沒有指定長度。陣列和slice之間的聯絡非常緊密。slice是非常輕量的資料結構,它是引用型別,指向底層的乙個陣列,該陣列被稱之為slice的底層...

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...