iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
Modern Web

golang後端入門分享系列 第 9

Day9-Go切片Slice

前言

上一章節我們介紹了 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

當想對切片最後面增加一個元素時,則可以使用append函式:

package main
 
import "fmt"
 
func main() {
  count := []int64{1}
  count = append(count, 2)
  fmt.Println(count) // [1 2]

}

如此一來,就可以在最後索引之後,增加一個元素。

矩陣 (matrix)

我們也可以利用多維切片製作矩陣 (matrix),見下例:

package main
 
import "fmt"
 
func main() {
   matrix := [][]float64{
       []float64{1, 2, 3},
       []float64{4, 5, 6},
   }
 
   fmt.Println(matrix)
}

make

切片也可以在執行期動態產生,這時候會使用 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/


上一篇
Day8-Go陣列Array
下一篇
Day10-Go結構Struct
系列文
golang後端入門分享30

尚未有邦友留言

立即登入留言