上一章節我們介紹了 Go 語言的陣列,但由於在宣告陣列後,他的長度需要為固定的,使得在部分需求中,使用起來有些許的不方便,所以 Go 提供另一個與型態與陣列非常相似的容器,叫做切片(Slice),一樣只能裝載相同性質的元素,但是長度是可以做彈性改變的,使得在使用上,更加方便。
我們先來看如何建立一個切片:
package main
import "fmt"
func main() {
count := []int64{}
fmt.Println(count) // []
}
可以打開昨天介紹的陣列,比較一下有哪裡不一樣,切片在中括號裡是不需要給定一個長度的,然而因為長度是可變的,所以會有一些函式是搭配使用,來對切片做增加或減少元素。
切片能改變長度的特性,也多了許多方便性,可以透過設定的上限以及下限來截取切片:
package main
import "fmt"
func main() {
count := []int64{1,2,3,4,5}
subCount := count[0:2]
fmt.Println(subCount) // [1 2]
}
我們解釋上述的程式碼,先宣告名為 count 的切片,而今天有一個需求是要印出 index 0到2的值,所以我們宣高另一個切片,設置下限為0,上限為2,然後對 count 做截取,如此一來,即可達到我們要的需求。
當想對切片最後面增加一個元素時,則可以使用append函式:
package main
import "fmt"
func main() {
count := []int64{1}
count = append(count, 2)
fmt.Println(count) // [1 2]
}
如此一來,就可以在最後索引之後,增加一個元素。
我們也可以利用多維切片製作矩陣 (matrix),見下例:
package main
import "fmt"
func main() {
matrix := [][]float64{
[]float64{1, 2, 3},
[]float64{4, 5, 6},
}
fmt.Println(matrix)
}
切片也可以在執行期動態產生,這時候會使用 make 做為關鍵字。我們在下方舉一個例子,我們動態產生一個長度為 3 的切片:
package main
import "fmt"
func main() {
slice := make([]int, 3)
for i := 0; i < len(slice); i++ {
y := i + 1
slice[i] = y * 2
}
fmt.Println(slice) // [2 4 6]
}
本文介紹了 Go 語言的另一種容器切片,作為與上一章節的陣列比較,這邊介紹了切片幾個優點,而切片在實務上的運用,也比陣列來的多,希望今天的講解對您有幫助,謝謝閱讀!
https://opensourcedoc.com/golang-programming/array-slice/