Go語言–切片(Slice)詳解

說明:

Go 語言切片是對數組的抽象。

Go 數組的長度不可改變,在特定場景中這樣的集合就不太適用,Go中提供瞭一種靈活,功能強悍的內置類型切片(“動態數組”),與數組相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。

一、定義切片

註意:切片不需要說明長度

1、聲明一個未指定大小的數組來定義切片

var identifier []type
//例如
var slice []int

2、使用make()函數來創建切片

var slice1 []type = make([]type, len)
//也可以簡寫為
slice1 := make([]type, len)
//例如
slice := make([]type, len)

二、切片是可索引的

1、len() 和 cap() 函數

可以由 len() 方法獲取長度。

切片提供瞭計算容量的方法 cap() 可以測量切片最長可以達到多少

package main

import "fmt"

func main(){
    var number = make([]int,3,5)
    fmt.Printf("len=%d cap=%d         slice=%v\n",len(number),cap(number),number)
}

//len=3 cap=5 slice=[0 0 0]

2、空(nil)切片

一個切片在未初始化之前默認為 nil,長度為 0

package main

import "fmt"

func main(){
    var number []int
    fmt.Printf("len=%d cap=%d slice=%v\n",len(number),cap(number),number)
}

//len=0 cap=0 slice=[]

三、切片截取

可以通過設置下限及上限來設置截取切片 [lower-bound:upper-bound]

package main

import "fmt"

func main() {
    //創建切片
    number := []int{0, 1, 2, 3, 4, 5, 6, 7, 8}
    printSlice(number)

    //打印原始切片
    fmt.Println("number == ", number)

    //打印子切片從索引1到索引4
    fmt.Println("number == ", number[1:4])

    //打印子切片默認下限
    fmt.Println("number == ", number[:3])

    //打印子切片默認上限
    fmt.Println("number == ", number[4:])

}

func printSlice(x []int) {
    fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}

結果:

四、增加切片的容量

原理:創建一個新的更大的切片並把原分片的內容都拷貝過來

append() 和 copy() 函數
package main

import (
    "fmt"
)

func main() {
    //創建切片
    var number []int
    printSlice(number)

    //允許追加空切片
    number = append(number,0)
    printSlice(number)

    //向切片添加一個元素
    number = append(number,1)
    printSlice(number)

    //同時添加多個元素
    number = append(number,2,3,4)
    printSlice(number)

    //創建的新的切片是之前的切片容量的兩倍
    number1 := make([]int,len(number),(cap(number))*2)

    //拷貝number的內容到number1中
    copy(number1,number)
    printSlice(number1)
}

func printSlice(x []int) {
    fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}

到此這篇關於Go語言–切片(Slice)詳解的文章就介紹到這瞭,更多相關Go語言切片(Slice)內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: