在 Go 語言(Golang)中,切片(Slice)是一種引用類型,它是對數(shù)組的抽象和擴展。切片本身不存儲數(shù)據(jù),而是描述了底層數(shù)組的一個連續(xù)片段(或者說是一個窗口)。切片提供了一種靈活的方式來操作數(shù)組的部分或全部元素,同時比數(shù)組更強大、更靈活。
切片可以通過以下方式聲明和初始化:
s := []int{1, 2, 3} // 聲明一個int類型的切片s,并初始化為包含三個元素的切片
a := [5]int{1, 2, 3, 4, 5}
s := a[1:4] // 從數(shù)組a中獲取索引1到索引3(不包括4)的元素作為切片s
在這個例子中,s
是一個新的切片,它引用了 a
數(shù)組的一部分(索引 1 到 3 的元素)。對 s
的修改不會影響 a
中索引 0 和 4 的元素,但會影響索引 1 到 3 的元素(如果它們沒有被其他切片共享)。
make
函數(shù):s := make([]int, 0, 5) // 聲明一個int類型的切片s,初始長度為0,容量為5
在這個例子中,make
函數(shù)用于分配并初始化一個切片。切片的初始長度為 0,但它有足夠的容量來存儲額外的元素,直到達到其容量限制(在這個例子中是 5)。
切片有三個屬性:長度(Length)、容量(Capacity)和指向的底層數(shù)組的指針(在 Go 中不直接暴露,但理解其存在對理解切片的行為很重要)。
切片支持多種操作,包括:
append
函數(shù)。for
循環(huán)或 range
關(guān)鍵字。copy
函數(shù)(但請注意,這不會復(fù)制底層數(shù)組,只是復(fù)制了切片的一部分或全部到另一個切片中)。append
函數(shù)會自動分配更大的內(nèi)存塊,并將舊切片的內(nèi)容復(fù)制到新內(nèi)存中(可能還有新追加的元素)。因此,頻繁地向切片追加元素可能會導(dǎo)致性能問題,特別是當(dāng)切片非常大時。nil
,表示切片不引用任何底層數(shù)組。對 nil
切片進行切片操作將返回另一個 nil
切片。下一篇: Golang 語言范圍(Range)