日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

go slice切片详解:定义、遍历、追加切片、切片拷贝

發(fā)布時間:2025/1/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go slice切片详解:定义、遍历、追加切片、切片拷贝 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

引入

【1】切片(slice)是golang中一種特有的數(shù)據(jù)類型
【2】數(shù)組有特定的用處,但是卻有一些呆板(數(shù)組長度固定不可變),所以在 Go 語言的代碼里并不是特別常見。相對的切片卻是隨處可見的,切片是一種建立在數(shù)組類型之上的抽象,它構(gòu)建在數(shù)組之上并且提供更強大的能力和便捷。
【3】切片(slice)是對數(shù)組一個連續(xù)片段的引用,所以切片是一個引用類型。這個片段可以是整個數(shù)組,或者是由起始和終止索引標(biāo)識的一些項的子集。需要注意的是,終止索引標(biāo)識的項不包括在切片內(nèi)。切片提供了一個相關(guān)數(shù)組的動態(tài)窗口。
【4】代碼:
切片的語法:
var 切片名 []類型 = 數(shù)組的一個片段引用

切片內(nèi)存分析

切片有3個字段的數(shù)據(jù)結(jié)構(gòu):一個是指向底層數(shù)組的指針,一個是切片的長度,一個是切片的容量。

代碼:

內(nèi)存:

定義方式

【1】方式1:定義一個切片,然后讓切片去引用一個已經(jīng)創(chuàng)建好的數(shù)組。

【2】方式2:通過make內(nèi)置函數(shù)來創(chuàng)建切片。基本語法: var切片名[type = make([], len,[cap])

PS :
make底層創(chuàng)建一個數(shù)組,對外不可見,所以不可以直接操作這個數(shù)組,要通過slice去間接的訪問各個元素,不可以直接對數(shù)組進行維護/操作

【3】方式3:定一個切片,直接就指定具體數(shù)組,使用原理類似make的方式。

切片的遍歷

【1】方式1:for循環(huán)常規(guī)方式遍歷
【2】方式2:for-range 結(jié)構(gòu)遍歷切片

package main import "fmt" func main(){//定義切片:slice := make([]int,4,20)slice[0] = 66slice[1] = 88slice[2] = 99slice[3] = 100//方式1:普通for循環(huán)for i := 0;i < len(slice);i++ {fmt.Printf("slice[%v] = %v \t" ,i,slice[i])}fmt.Println("\n------------------------------")//方式2:for-range循環(huán):for i,v := range slice {fmt.Printf("下標(biāo):%v ,元素:%v\n" ,i,v)} }

注意事項

【1】切片定義后不可以直接使用,需要讓其引用到一個數(shù)組,或者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】切片可以繼續(xù)切片

【5】切片可以動態(tài)增長

package main import "fmt" func main(){//定義數(shù)組: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.底層追加元素的時候?qū)?shù)組進行擴容,老數(shù)組擴容為新數(shù)組://2.創(chuàng)建一個新數(shù)組,將老數(shù)組中的4,7,3復(fù)制到新數(shù)組中,在新數(shù)組中追加88,50//3.slice2 底層數(shù)組的指向 指向的是新數(shù)組 //4.往往我們在使用追加的時候其實想要做的效果給slice追加:slice = append(slice,88,50)fmt.Println(slice)//5.底層的新數(shù)組 不能直接維護,需要通過切片間接維護操作。 }

可以通過append函數(shù)將切片追加給切片:

【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中對應(yīng)數(shù)組中元素內(nèi)容復(fù)制到b中對應(yīng)的數(shù)組中fmt.Println(b) }

總結(jié)

以上是生活随笔為你收集整理的go slice切片详解:定义、遍历、追加切片、切片拷贝的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。