go 語言切片是對陣列的抽象。
go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片("動態陣列"),與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。
你可以宣告乙個未指定大小的陣列來定義切片:
var identifier type切片不需要說明長度。
或使用make()函式來建立切片:
var slice1 type = make(type, len)也可以指定容量,其中capacity為可選引數。也可以簡寫為
slice1 := make(type, len)
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位置的元素,不包含右邊...