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