您好,登錄后才能下訂單哦!
這篇文章主要講解了“Go語(yǔ)言中的For循環(huán)常見(jiàn)問(wèn)題的處理方式”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Go語(yǔ)言中的For循環(huán)常見(jiàn)問(wèn)題的處理方式”吧!
For循環(huán)在我們?nèi)粘>幋a中可能用的很多。在很多業(yè)務(wù)場(chǎng)景中我們都需要用for循環(huán)處理。但golang中的for循環(huán)有一個(gè)大大大的坑,大家可否遇到。直接上代碼:
我們寫(xiě)一個(gè)測(cè)試類(lèi),定義一個(gè)切片數(shù)組,然后循環(huán)迭代每個(gè)元素,將元素的值放到另一個(gè)切片。循環(huán)finalArrays的時(shí)候按照我們的預(yù)期應(yīng)該輸出1、2、3、4。但事與愿違,輸出的結(jié)果如下圖:
懵逼了吧!為什么會(huì)出現(xiàn)這種奇怪的現(xiàn)象呢?這就是golang的循環(huán)變量的作用域?qū)е碌摹?/p>
在golang的for循環(huán)中,循環(huán)內(nèi)部創(chuàng)建的函數(shù)變量都是共享同一塊內(nèi)存地址,for循環(huán)總是使用同一塊內(nèi)存去接收循環(huán)中的的value變量的值。不管循環(huán)多少次,value的內(nèi)存地址都是相同的。事實(shí)確實(shí)如此,我們輸出value的內(nèi)存地址看下:
所以,可以看到,整個(gè)4次循環(huán)過(guò)程中,所有變量值都是在0xc0000b8780這個(gè)地址上迭代的。4次循環(huán)都指向的是同一塊內(nèi)存地址,最后一次賦值的操作變量的值是4,指向了這塊內(nèi)存地址,所以前三次的值都變成了4。那我們?cè)趺磧?yōu)化呢?我們只需要定義臨時(shí)變量。
我們定義一個(gè)臨時(shí)變量tmp,將value的值賦給tmp,問(wèn)題就解決了。
評(píng)論中很多同學(xué)說(shuō),例子不足以說(shuō)明這個(gè)問(wèn)題,我這里寫(xiě)一段我們實(shí)際業(yè)務(wù)場(chǎng)景的代碼,大家看看。
Bid結(jié)構(gòu)體中的屬性我就不貼圖了。這種情況很多新手同學(xué)會(huì)犯,尤其是從java轉(zhuǎn)go的同學(xué)。
感謝各位的閱讀,以上就是“Go語(yǔ)言中的For循環(huán)常見(jiàn)問(wèn)題的處理方式”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Go語(yǔ)言中的For循環(huán)常見(jiàn)問(wèn)題的處理方式這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。