Go slice(四)

Golang的數(shù)據(jù)聲明格式如下
data := [7]int{}
data:=[3]int{1, 2, 3}
data := [...]int{1, 2, 3}
我們注意到当娱,與其他語言不同的是數(shù)組的大小放在前面友鼻。
Go 語言的數(shù)組當做參數(shù)時叛本,是值傳遞颠毙,即會copy數(shù)組中的所有數(shù)據(jù)副瀑。
所以在實際的go語言開發(fā)中其實很少使用數(shù)組舱污,而是使用slice.

所以下面我們重點介紹一下slice
data := []int{}
data := []int{1,2, 3}
slice的聲明和array類似,只是省略了大小或者'...'
當slice的空間不足時粱栖,它就會自動將存儲空間增加一倍话浇。
可以用len(data)獲取slice中數(shù)據(jù)的長度,用cap(data)獲取slice的容量(capacity).

func printSlice(data []int){
    for _, ele := range data{
        fmt.Print(ele, " ")
    }
    fmt.Println()
}

func main(){
    data := []int{1,2,3,4}
    printSlice(data)
    fmt.Printf("Capacity: %d, Length: %d\n", cap(data), len(data))
    data = append(data, 10)
    printSlice(data)
    fmt.Printf("Capacity: %d, Length: %d\n", cap(data), len(data))

}

------------------------------------------
//result
1 2 3 4 
Capacity: 4, Length: 4
1 2 3 4 10 
Capacity: 8, Length: 5

上述代碼生聲明一個slice, 初始容量和數(shù)據(jù)長度都是4查排,然后通過append在slice后面動態(tài)添加了一個數(shù)據(jù)10凳枝, 此時由于容量已經(jīng)等于已有數(shù)據(jù)長度,即slice已滿跋核,所以需要動態(tài)擴容,go擴容方案是直接在原來的基礎上加倍叛买, 所以我們看到長度增加了1砂代,但是容量增加了4
所以這里需要注意的就是,如果slice容量已經(jīng)很多率挣,且滿了刻伊。那么此時添加一條記錄的代價將是非常高的。
我們也可以通過make函數(shù)來生成slice. 通過make函數(shù)還可以指定slice的初始大小
data := make([]byte, 5)
*說到make,這里我們提一下go語言的內(nèi)存分配椒功, go 有兩個內(nèi)建函數(shù)來分配內(nèi)存捶箱,new 和make. 兩者的區(qū)別是,new只是分配存儲空間动漾,make則主要用于slice, map, channel的初始化

copy() 函數(shù)

copy(dst, src): copy函數(shù)將src slice的數(shù)據(jù)拷貝到dst slice里面
其中丁屎,

  • dst, src必須是slice, 如果是array,則必須通過array[0:] 轉(zhuǎn)換成slice
  • copy時旱眯,src數(shù)據(jù)會覆蓋dst里面原來的數(shù)據(jù)晨川, 如果src數(shù)據(jù)量小于dst數(shù)據(jù)量证九,那么dst里面會有一部分數(shù)據(jù)不被覆蓋;如果src數(shù)據(jù)量大于dst,那么將只copy dst.length長度的src數(shù)據(jù)
    我們通過下面的實例來體會一下
package main

import "fmt"

func main(){
    a6 := []int{1,2,3,4,5,6}
    a4 := []int{-1,-2,-3,-4}

    fmt.Println("a6:", a6)
    fmt.Println("a4:", a4)

    copy(a6, a4)
    fmt.Println("copy a4 to a6, ", a6)
    fmt.Println()

    a6 = []int{1,2,3,4,5,6}
    a4 = []int{-1,-2,-3,-4}
    copy(a4, a6)
    fmt.Println("copy a6 to a4, ", a4)
    fmt.Println()

    array5 := [5]int{5,-5,5,-5,5}
    s7 := []int{7,7,7,7,7,7,7}
    fmt.Println("array5 ", array5)
    fmt.Println("s7 ", s7)
    copy(array5[0:], s7)
    fmt.Println("copy s7 to array5 ", array5)
}

--------------------------------------------
//result
a4: [-1 -2 -3 -4]
copy a4 to a6,  [-1 -2 -3 -4 5 6]

copy a6 to a4,  [1 2 3 4]

array5  [5 -5 5 -5 5]
s7  [7 7 7 7 7 7 7]
copy s7 to array5  [7 7 7 7 7]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末共虑,一起剝皮案震驚了整個濱河市愧怜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妈拌,老刑警劉巖拥坛,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異尘分,居然都是意外死亡猜惋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門音诫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惨奕,“玉大人,你說我怎么就攤上這事竭钝±孀玻” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵香罐,是天一觀的道長卧波。 經(jīng)常有香客問我,道長庇茫,這世上最難降的妖魔是什么港粱? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮旦签,結(jié)果婚禮上查坪,老公的妹妹穿的比我還像新娘。我一直安慰自己宁炫,他們只是感情好偿曙,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著羔巢,像睡著了一般望忆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上竿秆,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天启摄,我揣著相機與錄音,去河邊找鬼幽钢。 笑死歉备,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的搅吁。 我是一名探鬼主播威创,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼落午,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肚豺?” 一聲冷哼從身側(cè)響起溃斋,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吸申,沒想到半個月后梗劫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡截碴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年梳侨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片日丹。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡走哺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哲虾,到底是詐尸還是另有隱情丙躏,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布束凑,位于F島的核電站晒旅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏汪诉。R本人自食惡果不足惜废恋,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扒寄。 院中可真熱鬧鱼鼓,春花似錦、人聲如沸该编。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽上渴。三九已至,卻和暖如春喜颁,著一層夾襖步出監(jiān)牢的瞬間稠氮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工半开, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留隔披,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓寂拆,卻偏偏與公主長得像奢米,于是被迫代替她去往敵國和親抓韩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

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