在golang中,切片是對數組的一個連續(xù)片段的引用,這個片段可以是整個數組,也可以是由起始和終止索引標識的一些項的子集。Go語言中切片的內部結構包含地址、大小和容量,切片一般用于快速地操作一塊數據集合,如果將數據集合比作切糕的話,切片就是你要的“那一塊”,切的過程包含從哪里開始(切片的起始位置)及切多大(切片的大?。?,容量可以理解為裝切片的口袋大小。
php入門到就業(yè)線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調試工具:點擊使用
本教程操作環(huán)境:windows7系統(tǒng)、GO 1.18版本、Dell G3電腦。
切片(slice)是對數組的一個連續(xù)片段的引用,所以切片是一個引用類型(因此更類似于 C/C++ 中的數組類型,或者 Python 中的 list 類型),這個片段可以是整個數組,也可以是由起始和終止索引標識的一些項的子集,需要注意的是,終止索引標識的項不包括在切片內。
Go語言中切片的內部結構包含地址、大小和容量,切片一般用于快速地操作一塊數據集合,如果將數據集合比作切糕的話,切片就是你要的“那一塊”,切的過程包含從哪里開始(切片的起始位置)及切多大(切片的大?。?,容量可以理解為裝切片的口袋大小,如下圖所示。
圖:切片結構和內存分配
從數組或切片生成新的切片
切片默認指向一段連續(xù)內存區(qū)域,可以是數組,也可以是切片本身。
從連續(xù)內存區(qū)域生成切片是常見的操作,格式如下:
slice [開始位置 : 結束位置]
語法說明如下:
-
slice:表示目標切片對象;
-
開始位置:對應目標切片對象的索引;
-
結束位置:對應目標切片的結束索引。
從數組生成切片,代碼如下:
var a = [3]int{1, 2, 3} fmt.Println(a, a[1:2])
其中 a 是一個擁有 3 個整型元素的數組,被初始化為數值 1 到 3,使用 a[1:2] 可以生成一個新的切片,代碼運行結果如下:
[1 2 3] [2]
其中 [2] 就是 a[1:2] 切片操作的結果。
從數組或切片生成新的切片擁有如下特性:
-
取出的元素數量為:結束位置 – 開始位置;
-
取出元素不包含結束位置對應的索引,切片最后一個元素使用 slice[len(slice)] 獲取;
-
當缺省開始位置時,表示從連續(xù)區(qū)域開頭到結束位置;
-
當缺省結束位置時,表示從開始位置到整個連續(xù)區(qū)域末尾;
-
兩者同時缺省時,與切片本身等效;
-
兩者同時為 0 時,等效于空切片,一般用于切片復位。
根據索引位置取切片 slice 元素值時,取值范圍是(0~len(slice)-1),超界會報運行時錯誤,生成切片時,結束位置可以填寫 len(slice) 但不會報錯?!?/p>