Golang:數(shù)組與切片的復(fù)制

在Golang中钻洒,數(shù)組是值類型而切片是引用類型酗昼。因此值的復(fù)制與切片的復(fù)制并不相同。

數(shù)組的復(fù)制

對(duì)于值類型的數(shù)組來說闺骚,變量指向的并不是第一個(gè)元素的指針彩扔,而是整個(gè)數(shù)組。以下情況會(huì)發(fā)生數(shù)組的復(fù)制:

  • 將數(shù)組變量賦值給另一個(gè)數(shù)組變量
  • 將數(shù)組變量作為參數(shù)傳遞給方法
    舉個(gè)栗子:
package main

import "fmt"

func main() {
    sample1 := [2]string{"a", "b"}
    fmt.Printf("Sample1 Before: %v\n", sample1)
    sample2 := sample1
    sample2[0] = "c"
    fmt.Printf("Sample1 After assignment: %v\n", sample1)
    fmt.Printf("Sample2: %v\n", sample2)
    test(sample1)
    fmt.Printf("Sample1 After Test Function Call: %v\n", sample1)
}
func test(sample [2]string) {
    sample[0] = "d"
    fmt.Printf("Sample in Test function: %v\n", sample)
}

輸出

Sample1 Before: [a b]
Sample1 After assignment: [a b]
Sample2: [c b]
Sample in Test function: [d b]
Sample1 After Test Function Call: [a b]

在上例中僻爽,

  • 將simple1賦值給simple2后虫碉,修改simple2的第一個(gè)元素,simple1的值并沒有改變胸梆。因?yàn)閿?shù)組的復(fù)制是值復(fù)制敦捧,simple2的修改并不會(huì)對(duì)simple1產(chǎn)生影響
  • 將simple1作為參數(shù)傳遞給test方法,在方法中修改數(shù)組第一個(gè)元素碰镜。simple1的值同樣不會(huì)被改變兢卵。因?yàn)閿?shù)組作為參數(shù)傳入方法時(shí)發(fā)生了值復(fù)制。

切片的復(fù)制

golang的builtin包提供的copy方法可以用來復(fù)制切片绪颖。該方法返回成功復(fù)制元素的個(gè)數(shù)秽荤,簽名如下:

func copy(dst, src []Type) int

被復(fù)制的元素個(gè)數(shù)是dst和src中短的那個(gè)。同時(shí)注意一旦復(fù)制柠横,對(duì)dst的任何修改都不會(huì)影響到src窃款,反之亦然。

package main

import "fmt"

func main() {
    src := []int{1, 2, 3, 4, 5}
    dst := make([]int, 5)

    numberOfElementsCopied := copy(dst, src)
    fmt.Printf("Number Of Elements Copied: %d\n", numberOfElementsCopied)
    fmt.Printf("dst: %v\n", dst)
    fmt.Printf("src: %v\n", src)

    //After changing numbers2
    dst[0] = 10
    fmt.Println("\nAfter changing dst")
    fmt.Printf("dst: %v\n", dst)
    fmt.Printf("src: %v\n", src)
}

輸出

Number Of Elements Copied: 5
dst: [1 2 3 4 5]
src: [1 2 3 4 5]

After changing dst
dst: [10 2 3 4 5]
src: [1 2 3 4 5]

參考:Copy an array or slice in Go (Golang)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牍氛,一起剝皮案震驚了整個(gè)濱河市晨继,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搬俊,老刑警劉巖踱稍,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異悠抹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)扩淀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門楔敌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人驻谆,你說我怎么就攤上這事卵凑∏炱福” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵勺卢,是天一觀的道長(zhǎng)伙判。 經(jīng)常有香客問我,道長(zhǎng)黑忱,這世上最難降的妖魔是什么宴抚? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮甫煞,結(jié)果婚禮上菇曲,老公的妹妹穿的比我還像新娘。我一直安慰自己抚吠,他們只是感情好常潮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著楷力,像睡著了一般喊式。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上萧朝,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天岔留,我揣著相機(jī)與錄音,去河邊找鬼剪勿。 笑死贸诚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的厕吉。 我是一名探鬼主播酱固,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼头朱!你這毒婦竟也來了运悲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤项钮,失蹤者是張志新(化名)和其女友劉穎班眯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烁巫,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡署隘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了亚隙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磁餐。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖阿弃,靈堂內(nèi)的尸體忽然破棺而出诊霹,到底是詐尸還是另有隱情羞延,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布脾还,位于F島的核電站伴箩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鄙漏。R本人自食惡果不足惜嗤谚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泥张。 院中可真熱鬧呵恢,春花似錦、人聲如沸媚创。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)钞钙。三九已至鳄橘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芒炼,已是汗流浹背瘫怜。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留本刽,地道東北人鲸湃。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像子寓,于是被迫代替她去往敵國(guó)和親暗挑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355