淺談golangslice切片原理-創(chuàng)新互聯(lián)

slice介紹

創(chuàng)新互聯(lián)是一家專業(yè)從事網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司。作為專業(yè)網(wǎng)站制作公司,創(chuàng)新互聯(lián)依托的技術(shù)實力、以及多年的網(wǎng)站運營經(jīng)驗,為您提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷推廣及網(wǎng)站設(shè)計開發(fā)服務(wù)!

數(shù)組的長度在定義之后無法再次修改;數(shù)組是值類型,每次傳遞都將產(chǎn)生一份副本。顯然這種數(shù)據(jù)結(jié)構(gòu)無法完全滿足開發(fā)者的真實需求。在初始定義數(shù)組時,我們并不知道需要多大的數(shù)組,因此我們就需要“動態(tài)數(shù)組”。在Go里面這種數(shù)據(jù)結(jié)構(gòu)叫slice,slice并不是真正意義上的動態(tài)數(shù)組,而是一個引用類型。slice總是指向一個底層array,slice的聲明也可以像array一樣,只是不需要長度,它是可變長的,可以隨時往slice里面加數(shù)據(jù)。

初看起來,數(shù)組切片就像一個指向數(shù)組的指針,實際上它擁有自己的數(shù)據(jù)結(jié)構(gòu),而不僅僅是個指針。數(shù)組切片的數(shù)據(jù)結(jié)構(gòu)可以抽象為以下3個變量:

1.一個指向原生數(shù)組的指針(point):指向數(shù)組中slice指定的開始位置;
2.?dāng)?shù)組切片中的元素個數(shù)(len):即slice的長度;
3.?dāng)?shù)組切片已分配的存儲空間(cap):也就是slice開始位置到數(shù)組的最后位置的長度。

從底層實現(xiàn)的角度來看,數(shù)組切片實際上仍然使用數(shù)組來管理元素,基于數(shù)組,數(shù)組切片添加了一系列管理功能,可以隨時動態(tài)擴(kuò)充存放空間,并且可以被隨意傳遞而不會導(dǎo)致所管理的元素被重復(fù)復(fù)制。

slice聲明

聲明slice時方括號[]內(nèi)沒有任何數(shù)據(jù)
聲明一個元素類型為int的slice
var mySlice []int    聲明兩個元素類型為byte的slice   

golang 中的 slice 非常強(qiáng)大,讓數(shù)組操作非常方便高效。在開發(fā)中不定長度表示的數(shù)組全部都是 slice 。但是很多同學(xué)對 slice 的模糊認(rèn)識,造成認(rèn)為golang中的數(shù)組是引用類型,結(jié)果就是在實際開發(fā)中碰到很多坑,以至于出現(xiàn)一些莫名奇妙的問題,數(shù)組中的數(shù)據(jù)丟失了。

下面我們就開始詳細(xì)理解下 slice ,理解后會對開發(fā)出高效的程序非常有幫助。

這個是 slice 的數(shù)據(jù)結(jié)構(gòu),它很簡單,一個指向真實 array 地址的指針 ptr ,slice 的長度 len 和容量 cap 。

淺談golang slice 切片原理

其中 len 和 cap 就是我們在調(diào)用 len(slice) 和 cap(slice) 返回的值。

我們來按照 slice 的數(shù)據(jù)結(jié)構(gòu)定義來解析出 ptr, len, cap

// 按照上圖定義的數(shù)據(jù)結(jié)構(gòu)
type Slice struct {
  ptr  unsafe.Pointer    // Array pointer
  len  int        // slice length
  cap   int        // slice capacity
}

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

新聞名稱:淺談golangslice切片原理-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://muchs.cn/article0/djgioo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、建站公司、全網(wǎng)營銷推廣、網(wǎng)站建設(shè)、面包屑導(dǎo)航、域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)