go slice切片详解:定义、遍历、追加切片、切片拷贝
引入
【1】切片(slice)是golang中一種特有的數據類型
【2】數組有特定的用處,但是卻有一些呆板(數組長度固定不可變),所以在 Go 語言的代碼里并不是特別常見。相對的切片卻是隨處可見的,切片是一種建立在數組類型之上的抽象,它構建在數組之上并且提供更強大的能力和便捷。
【3】切片(slice)是對數組一個連續片段的引用,所以切片是一個引用類型。這個片段可以是整個數組,或者是由起始和終止索引標識的一些項的子集。需要注意的是,終止索引標識的項不包括在切片內。切片提供了一個相關數組的動態窗口。
【4】代碼:
切片的語法:
var 切片名 []類型 = 數組的一個片段引用
切片內存分析
切片有3個字段的數據結構:一個是指向底層數組的指針,一個是切片的長度,一個是切片的容量。
代碼:
內存:
定義方式
【1】方式1:定義一個切片,然后讓切片去引用一個已經創建好的數組。
【2】方式2:通過make內置函數來創建切片。基本語法: var切片名[type = make([], len,[cap])
PS :
make底層創建一個數組,對外不可見,所以不可以直接操作這個數組,要通過slice去間接的訪問各個元素,不可以直接對數組進行維護/操作
【3】方式3:定一個切片,直接就指定具體數組,使用原理類似make的方式。
切片的遍歷
【1】方式1:for循環常規方式遍歷
【2】方式2:for-range 結構遍歷切片
注意事項
【1】切片定義后不可以直接使用,需要讓其引用到一個數組,或者make一個空間供切片來使用
【2】切片使用不能越界。
【3】簡寫方式:
1) var slice = arr[0:end] ----》 var slice = arr[:end] 2) var slice = arr[start:len(arr)] ----》 var slice = arr[start:] 3) var slice = arr[0:len(arr)] ----》 var slice = arr[:]【4】切片可以繼續切片
【5】切片可以動態增長
package main import "fmt" func main(){//定義數組:var intarr [6]int = [6]int{1,4,7,3,6,9}//定義切片:var slice []int = intarr[1:4] //4,7,3fmt.Println(len(slice))slice2 := append(slice,88,50)fmt.Println(slice2) //[4 7 3 88 50]fmt.Println(slice)//底層原理://1.底層追加元素的時候對數組進行擴容,老數組擴容為新數組://2.創建一個新數組,將老數組中的4,7,3復制到新數組中,在新數組中追加88,50//3.slice2 底層數組的指向 指向的是新數組 //4.往往我們在使用追加的時候其實想要做的效果給slice追加:slice = append(slice,88,50)fmt.Println(slice)//5.底層的新數組 不能直接維護,需要通過切片間接維護操作。 }可以通過append函數將切片追加給切片:
【6】切片的拷貝:
package main import "fmt" func main(){//定義切片:var a []int = []int{1,4,7,3,6,9}//再定義一個切片:var b []int = make([]int,10)//拷貝:copy(b,a) //將a中對應數組中元素內容復制到b中對應的數組中fmt.Println(b) }總結
以上是生活随笔為你收集整理的go slice切片详解:定义、遍历、追加切片、切片拷贝的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux ssh客戶端:termius
- 下一篇: go数组详解:数组的定义、遍历、使用细节