新聞中心
1. 什么是拷貝?
當(dāng)你把 a 變量賦值給 b 變量時(shí),其實(shí)就是把 a 變量拷貝給 b 變量

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)公司推出薛城免費(fèi)做網(wǎng)站回饋大家。
- a := "hello"
- b := a
這只是拷貝最簡(jiǎn)單的一種形式,而有些形式卻表現(xiàn)得非常的隱蔽。比如:
- 你往一個(gè)函數(shù)中傳參
- 你向通道中傳入對(duì)象
這些其實(shí)在 Go編譯器中都會(huì)進(jìn)行拷貝的動(dòng)作。
2. 什么是深淺拷貝?
知道了什么是拷貝,那我們?cè)偻铧c(diǎn)開挖,聊聊深淺拷貝。
不過(guò)先別急,咱先了解下數(shù)據(jù)結(jié)構(gòu)的兩種類型:
值類型 :String,Array,Int,Struct,F(xiàn)loat,Bool
引用類型:Slice,Map
這兩種不同的類型在拷貝的時(shí)候,在拷貝的時(shí)候效果是完全不一樣的,這對(duì)于很多新手可能是一個(gè)坑。
對(duì)于值類型來(lái)說(shuō),你的每一次拷貝,Go 都會(huì)新申請(qǐng)一塊內(nèi)存空間,來(lái)存儲(chǔ)它的值,改變其中一個(gè)變量,并不會(huì)影響另一個(gè)變量。
- func main() {
- aArr := [3]int{0,1,2}
- fmt.Printf("打印 aArr: %v \n", aArr)
- bArr := aArr
- aArr[0] = 88
- fmt.Println("將 aArr 拷貝給 bArr 后,并修改 aArr[0] = 88")
- fmt.Printf("打印 aArr: %v \n", aArr)
- fmt.Printf("打印 bArr: %v \n", bArr)
- }
從輸出結(jié)果來(lái)看,aArr 和 bArr 相互獨(dú)立,互不干擾
- 打印 aArr: [0 1 2]
- 將 aArr 拷貝給 bArr 后,并修改 aArr[0] = 88
- 打印 aArr: [88 1 2]
- 打印 bArr: [0 1 2]
對(duì)于引用類型來(lái)說(shuō),你的每一次拷貝,Go 不會(huì)申請(qǐng)新的內(nèi)存空間,而是使用它的指針,兩個(gè)變量名其實(shí)都指向同一塊內(nèi)存空間,改變其中一個(gè)變量,會(huì)直接影響另一個(gè)變量。
- func main() {
- aslice := []int{0,1,2}
- fmt.Printf("打印 aslice: %v \n", aslice)
- bslice := aslice
- aslice[0] = 88
- fmt.Println("將 aslice 拷貝給 bslice 后,并修改 aslice[0] = 88")
- fmt.Printf("打印 aslice: %v \n", aslice)
- fmt.Printf("打印 bslice: %v \n", bslice)
- }
從輸出結(jié)果來(lái)看,aslice 的更新直接反映到了 bslice 的值。
- 打印 aslice: [0 1 2]
- 將 aslice 拷貝給 bslice 后,并修改 aslice[0] = 88
- 打印 aslice: [88 1 2]
- 打印 bslice: [88 1 2]
是不是很簡(jiǎn)單?跟著明哥一起來(lái)攻克 Go 的各個(gè)邊邊角角的知識(shí)吧
加油噢,我們下篇見(jiàn)
本文轉(zhuǎn)載自微信公眾號(hào)「Go編程時(shí)光」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Go編程時(shí)光公眾號(hào)。
分享題目:一篇學(xué)會(huì)深拷貝和淺拷貝
當(dāng)前路徑:http://www.dlmjj.cn/article/cdiigph.html


咨詢
建站咨詢
