Go語言學習十一 go語言切片

2021-08-19 04:15:58 字數 2688 閱讀 1519

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)

以上例項執行輸出結果為:

len=3 cap=5 slice=[0 0 0]
乙個切片在未初始化之前預設為 nil,長度為 0,例項如下:

package main

import "fmt"

func main()

}func printslice(x int)

以上例項執行輸出結果為:

len=0 cap=0 slice=

切片是空的

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

package main

import "fmt"

func main()

printslice(numbers)

/* 列印原始切片 */

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

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

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

/* 預設下限為 0*/

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

/* 預設上限為 len(s)*/

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

numbers1 := make(int,0,5)

printslice(numbers1)

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

number2 := numbers[:2]

printslice(number2)

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

number3 := numbers[2:5]

printslice(number3)

}func printslice(x int)

執行以上**輸出結果為:

len=9 cap=9 slice=[0 1 2 3 4 5 6 7 8]

numbers == [0 1 2 3 4 5 6 7 8]

numbers[1:4] == [1 2 3]

numbers[:3] == [0 1 2]

numbers[4:] == [4 5 6 7 8]

len=0 cap=5 slice=

len=2 cap=9 slice=[0 1]

len=3 cap=7 slice=[2 3 4]

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

package main

import "fmt"

func main()

func printslice(x int)

以上**執行輸出結果為:

len=0 cap=0 slice=

len=1 cap=2 slice=[0]

len=2 cap=2 slice=[0 1]

len=5 cap=8 slice=[0 1 2 3 4]

len=5 cap=16 slice=[0 1 2 3 4]

GO語言學習 切片

切片的長度可以用len獲得,容量由cap獲得.s1 make int,5 len s1 可以得到長度為5,cap s1 可以得到容量為5 s2 make int,5,8 len s2 可以得到長度為5,cap s2 可以得到容量為8 在s1中我沒有用make說明此切片的容量,因此他的容量和長度相等都...

Go語言學習筆記十二 Go語言切片

1 package main 23 import fmt 45 切片定義 切片是基於陣列型別的一層封裝。它非常靈活,可以自動擴容,切片是乙個引用型別 6func main else 16 b 0 100 這種寫法是錯誤的,切片必須先初始化 17var c 5 int 5 int 18 fmt.pri...

go語言學習筆記 切片

理解 建立切片 1.make函式,語法 make 型別,長度,容量 s make int,3,5 切片s可以訪問3個元素,底層陣列擁有5個元素 注意 不允許建立長度小於容量的切片 2.建立乙個陣列的切片 arr string slice arr 1 3 hi go 從索引1到3位置的元素,不包含右邊...