Go語言 slice切片的使用


  切片(slice)是對數組的一個連續片段的引用,所以切片是一個引用類型(因此更類似於 C/C++ 中的數組類型,或者 Python 中的 list 類型),這個片段可以是整個數組,也可以是由起始和終止索引標識的一些項的子集,需要注意的是,終止索引標識的項不包括在切片內。

  Go語言中切片的內部結構包含地址、大小和容量,切片一般用於快速地操作一塊數據集合,如果將數據集合比作切糕的話,切片就是你要的“那一塊”,切的過程包含從哪里開始(切片的起始位置)及切多大(切片的大小),容量可以理解為裝切片的口袋大小,如下圖所示。

  從數組或切片生成新的切片

  切片默認指向一段連續內存區域,可以是數組,也可以是切片本身。

  從連續內存區域生成切片是常見的操作,格式如下:

  slice [開始位置 : 結束位置]

  語法說明如下:

    • slice:表示目標切片對象;
    • 開始位置:對應目標切片對象的索引;
    • 結束位置:對應目標切片的結束索引。

  從數組或切片生成新的切片擁有如下特性:

  • 取出的元素數量為:結束位置 - 開始位置;
  • 取出元素不包含結束位置對應的索引,切片最后一個元素使用 slice[len(slice)] 獲取;
  • 當缺省開始位置時,表示從連續區域開頭到結束位置;
  • 當缺省結束位置時,表示從開始位置到整個連續區域末尾;
  • 兩者同時缺省時,與切片本身等效;
  • 兩者同時為 0 時,等效於空切片,一般用於切片復位。

  程序實例代碼

package main

import "fmt"

func main() {
    fmt.Println("從數組或切片生成新的切片")
    //a 是一個擁有 3 個整型元素的數組,被初始化為數值 1 到 3
    var a = [3]int{1, 2, 3}
    //使用 a[1:2] 可以生成一個新的切片   [2] 就是 a[1:2] 切片操作的結果
    fmt.Println(a, a[1:2])
    fmt.Println("表示原有的切片")
    //生成切片的格式中,當開始和結束位置都被忽略時,生成的切片將表示和原切片一致的切片
    fmt.Println(a[:])
    fmt.Println("重置切片,清空擁有的元素")
    fmt.Println(a[0:0])

    fmt.Println("直接聲明新的切片")
    //聲明字符串切片
    var strList []string
    //聲明整型切片
    var numList []int
    //聲明空整型切片
    var numListEmpty = []int{}
    //輸出3個切片
    fmt.Println(strList, numList, numListEmpty)
    //輸出3個切片大小
    fmt.Println(len(strList), len(numList), len(numListEmpty))

    fmt.Println("使用 make() 函數構造切片")
    c := make([]int, 2)
    d := make([]int, 2, 10)
    fmt.Println(c, d)

    fmt.Println(len(c), len(d))

}

 

  輸出結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM