第九章 九析帶你輕鬆完爆 go - 切片 slice

系列文章:


總目錄索引:九析帶你輕鬆完爆 go 系列教程

目錄

1 前言

2 切片的聲明

3 切片的初始化

    3.1 先聲明後初始化

    3.2 聲明並初始化

4 切片和數組的關係

    4.1 數組轉化爲切片

    4.2 切片的長度

    4.3 切片的容量

    4.4 切片的切片


1 前言

        如果你對博客有任何疑問或者想更深入學習 go,請加微信羣,我們一起進步:


2 切片的聲明

        切片在 go 語言中是一種特殊的數據類型,你不要覺得它難學,你只需要將它看成一種特殊的數組類型即可。它跟數組區別在於,數組聲明時需要指定長度,但切片並不指定長度。如下所示:

package main


import "fmt"


func main() {

     var slice []int # 切片

     var arr [2]int # 數組

     fmt.Println(slice)

     fmt.Println(arr)

}

        程序執行結果如下:

[]

[0 0]


3 切片的初始化

        切片初始化跟數組初始化沒任何不同。分爲先聲明後初始化和同時聲明並初始化

3.1 先聲明後初始化

package main


import "fmt"


func main() {

     var slice []int

     slice = []int{2, 3}

     fmt.Println(slice)

}

3.2 聲明並初始化

package main


import "fmt"


func main() {

     slice := []int{1, 2, 3}

     fmt.Println(slice)

}


4 切片和數組的關係

        切片和數組的關係從某種程度上類似數據庫中的視圖(view)和表(table)的關係。下面的例子會印證此說法。

4.1 數組轉化爲切片

package main


import "fmt"


func main() {

     var arr [6]int = [6]int{1, 3, 5, 7, 9, 11} # 數組定義並初始化

     var slice = arr[0:6] # 將數組 arr 進行切片,形成切片數據類型,切片的長度此例爲 [0, 6)(左閉右開)

     fmt.Println(arr)

     fmt.Println(slice)

}

        執行結果:

[1 3 5 7 9 11]

[1 3 5 7 9 11]

4.2 切片的長度

        切片長度可通過 len() 函數獲得:

package main


import "fmt"


func main() {

     var arr [6]int = [6]int{1, 3, 5, 7, 9, 11}

     var slice = arr[0:6]

     fmt.Println(arr)

     fmt.Println(slice)

     fmt.Println(len(slice)) # 長度爲6,就是元素個數

}

4.3 切片的容量

        切片容量可通過函數 cap() 獲得。函數結果類似 java 語言中 string.substring(index, len(string)) 的值。樣例代碼如下:

package main


import "fmt"


func main() {

     var arr [6]int = [6]int{1, 3, 5, 7, 9, 11}

     var slice1 = arr[0:3] # 該切片從索引 0 開始。

     fmt.Println(cap(slice1)) # cap() 值等於數組從索引(0)到最後元素的個數。


     var slice2 = arr[3:6] # 該切片從索引 3 開始。

     fmt.Println(cap(slice2)) # cap() 值等於數組從索引(3)到最後元素的個數


    var slice3 = arr[2:4]

    fmt.Println(cap(slice3))

}

        執行結果:

6

3

4

4.4 切片的切片

package main


import "fmt"


func main() {

     var arr [6]int = [6]int{1, 3, 5, 7, 9, 11}

     var slice = arr[2:5]

     var sliceOfSlice = slice[2:]

     fmt.Println(arr)

     fmt.Println(slice)

     fmt.Println(sliceOfSlice)

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章