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