」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼我的GO範圍循環不修改數組元素?

為什麼我的GO範圍循環不修改數組元素?

發佈於2025-02-04
瀏覽:124

[2 。如以下GO代碼所示,這可能導致意外行為:

導入“ FMT” 鍵入mytype struct { 字段字符串 } func main(){ var陣列[10] mytype 對於_,e:= range數組{ e.field =“ foo” } 對於_,e:= range數組{ fmt.println(e.field) fmt.println(“ - ”) } } Why Does My Go Range Loop Not Modify Array Elements?
在此示例中,目的是修改數組中每個元素的“字段”屬性。但是,由於範圍語句返回該值的副本,因此對本地副本進行了更改,並且不會影響原始數組。結果,輸出將所有“字段”屬性顯示為具有默認值。

要解決此問題,您無法在範圍循環中返回項目的地址。相反,您應該使用索引通過數組迭代,如下所示:

mytype 對於IDX,_:= range Array { 數組[idx] .field =“ foo” } 對於_,e:= range數組{ fmt.println(e.field) fmt.println(“ - ”) } } 通過使用索引而不是for循環中的值,您確保對“字段”屬性所做的更改反映在原始數組中。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3