slice切片

Go 語言切片是對數(shù)組的抽象另凌。

Go 數(shù)組的長度不可改變糕档,在特定場景中這樣的集合就不太適用境析,Go中提供了一種靈活义矛,功能強悍的內(nèi)置類型切片("動態(tài)數(shù)組"),與數(shù)組相比切片的長度是不固定的妨托,可以追加元素缸榛,在追加時可能使切片的容量增大。

切片本身并不是動態(tài)數(shù)組或者數(shù)組指針兰伤。它內(nèi)部實現(xiàn)的數(shù)據(jù)結(jié)構(gòu)通過指針引用底層數(shù)組内颗,設(shè)定相關(guān)屬性將數(shù)據(jù)讀寫操作限定在指定的區(qū)域內(nèi)。切片本身是一個只讀對象敦腔,其工作機制類似數(shù)組指針的一種封裝均澳。

切片(slice)是對數(shù)組一個連續(xù)片段的引用,所以切片是一個引用類型(因此更類似于 C/C++ 中的數(shù)組類型符衔,或者 Python 中的 list 類型)找前。這個片段可以是整個數(shù)組,或者是由起始和終止索引標(biāo)識的一些項的子集判族。需要注意的是躺盛,終止索引標(biāo)識的項不包括在切片內(nèi)。切片提供了一個與指向數(shù)組的動態(tài)窗口形帮。

給定項的切片索引可能比相關(guān)數(shù)組的相同元素的索引小槽惫。和數(shù)組不同的是,切片的長度可以在運行時修改辩撑,最小為 0 最大為相關(guān)數(shù)組的長度:切片是一個長度可變的數(shù)組界斜。


切片的結(jié)構(gòu)體由3部分構(gòu)成,Pointer 是指向一個數(shù)組的指針合冀,len 代表當(dāng)前切片的長度各薇,cap 是當(dāng)前切片的容量。cap 總是大于等于 len 的君躺。

如果想從 slice 中得到一塊內(nèi)存地址峭判,可以這樣做:

????s:=make([]byte,200)

????ptr:=unsafe.Pointer(&s[0])

如果反過來呢?從 Go 的內(nèi)存地址中構(gòu)造一個 slice晰洒。

????varptr unsafe.Pointer

????vars1=struct{

????????addr uintptr

????????len int

????????cap int

????}{ptr,length,length}

????s := *(*[]byte)(unsafe.Pointer(&s1))

構(gòu)造一個虛擬的結(jié)構(gòu)體朝抖,把 slice 的數(shù)據(jù)結(jié)構(gòu)拼出來啥箭。

當(dāng)然還有更加直接的方法谍珊,在 Go 的反射中就存在一個與之對應(yīng)的數(shù)據(jù)結(jié)構(gòu) SliceHeader,我們可以用它來構(gòu)造一個 slice

? ??var o []byte

? ??sliceHeader := (*reflect.SliceHeader)((unsafe.Pointer(&o)))

? ??sliceHeader.Cap=length

? ??sliceHeader.Len=length

? ??sliceHeader.Data=uintptr(ptr)

1、定義切片

(1)聲明一個未指定大小的數(shù)組來定義切片:var identifier []type ?需要注意的是 [ ] 里面不要寫數(shù)組的容量砌滞,因為如果寫了個數(shù)以后就是數(shù)組了侮邀,而不是切片了

(2)使用make()函數(shù)來創(chuàng)建切片:var slice1 []type = make([]type, len)

????????????????????????????????????????????????????????slice1 := make([]type, len)

? ??????????????????????????????????????????????????????make([]T, length, capacity)


2、切片的初始化

s :=[] int {1,2,3 } ?直接初始化切片贝润,[]表示是切片類型绊茧,{1,2,3}初始化值依次是1,2,3.其cap=len=3

s := arr[:] ????初始化切片s,是數(shù)組arr的引用

s := arr[startIndex:endIndex] ????將arr中從下標(biāo)startIndex到endIndex-1 下的元素創(chuàng)建為一個新的切片

s := arr[startIndex:]?? ??缺省endIndex時將表示一直到arr的最后一個元素

s := arr[:endIndex]?? ??缺省startIndex時將表示從arr的第一個元素開始

s1 := s[startIndex:endIndex]?? ??通過切片s初始化切片s1

s :=make([]int,len,cap)?? ??通過內(nèi)置函數(shù)make()初始化切片s,[]int 標(biāo)識為其元素類型為int的切片

3、內(nèi)置函數(shù)

len() 函數(shù):切片是可索引的打掘,并且可以由 len() 方法獲取長度华畏。

cap() 函數(shù):切片提供了計算容量的方法 cap() 可以測量切片最長可以達到多少。

append()函數(shù):如果想增加切片的容量尊蚁,我們必須創(chuàng)建一個新的更大的切片并把原分片的內(nèi)容都拷貝過來亡笑。

copy() 函數(shù):值拷貝。

4横朋、底層實現(xiàn)

https://blog.csdn.net/m0_37579159/article/details/79344056(感覺這篇作者寫得很好)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末仑乌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子琴锭,更是在濱河造成了極大的恐慌晰甚,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件决帖,死亡現(xiàn)場離奇詭異厕九,居然都是意外死亡,警方通過查閱死者的電腦和手機古瓤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門止剖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人落君,你說我怎么就攤上這事穿香。” “怎么了绎速?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵皮获,是天一觀的道長。 經(jīng)常有香客問我纹冤,道長洒宝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任萌京,我火速辦了婚禮雁歌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘知残。我一直安慰自己靠瞎,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乏盐,像睡著了一般佳窑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上父能,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天神凑,我揣著相機與錄音,去河邊找鬼何吝。 笑死溉委,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爱榕。 我是一名探鬼主播薛躬,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼呆细!你這毒婦竟也來了型宝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤絮爷,失蹤者是張志新(化名)和其女友劉穎趴酣,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坑夯,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡岖寞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了柜蜈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仗谆。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖淑履,靈堂內(nèi)的尸體忽然破棺而出隶垮,到底是詐尸還是另有隱情,我是刑警寧澤秘噪,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布狸吞,位于F島的核電站,受9級特大地震影響指煎,放射性物質(zhì)發(fā)生泄漏蹋偏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一至壤、第九天 我趴在偏房一處隱蔽的房頂上張望威始。 院中可真熱鬧,春花似錦像街、人聲如沸黎棠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽葫掉。三九已至,卻和暖如春跟狱,著一層夾襖步出監(jiān)牢的瞬間俭厚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工驶臊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挪挤,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓关翎,卻偏偏與公主長得像扛门,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纵寝,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容