新聞中心
For循環(huán)在我們?nèi)粘>幋a中可能用的很多。在很多業(yè)務(wù)場(chǎng)景中我們都需要用for循環(huán)處理。但golang中的for循環(huán)有一個(gè)大大大的坑,大家可否遇到。直接上代碼:

成都創(chuàng)新互聯(lián)專注于辛集網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供辛集營(yíng)銷型網(wǎng)站建設(shè),辛集網(wǎng)站制作、辛集網(wǎng)頁設(shè)計(jì)、辛集網(wǎng)站官網(wǎng)定制、微信小程序定制開發(fā)服務(wù),打造辛集網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供辛集網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
我們寫一個(gè)測(cè)試類,定義一個(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)過程中,所有變量值都是在0xc0000b8780這個(gè)地址上迭代的。4次循環(huán)都指向的是同一塊內(nèi)存地址,最后一次賦值的操作變量的值是4,指向了這塊內(nèi)存地址,所以前三次的值都變成了4。那我們?cè)趺磧?yōu)化呢?我們只需要定義臨時(shí)變量。
我們定義一個(gè)臨時(shí)變量tmp,將value的值賦給tmp,問題就解決了。
評(píng)論中很多同學(xué)說,例子不足以說明這個(gè)問題,我這里寫一段我們實(shí)際業(yè)務(wù)場(chǎng)景的代碼,大家看看。
Bid結(jié)構(gòu)體中的屬性我就不貼圖了。這種情況很多新手同學(xué)會(huì)犯,尤其是從java轉(zhuǎn)go的同學(xué)。
網(wǎng)站標(biāo)題:Go語言的中的For循環(huán)之大坑
轉(zhuǎn)載來于:http://m.5511xx.com/article/dpeosos.html


咨詢
建站咨詢
