天天看點

常見問題之Golang——在for循環内使用go func進行使用參數時總是使用最後一個對象

常見問題之Golang——在for循環内使用go func進行使用參數時總是使用最後一個對象

背景

日常我們開發時,會遇到各種各樣的奇奇怪怪的問題(踩坑o(╯□╰)o),這個常見問題系列就是我日常遇到的一些問題的記錄文章系列,這裡整理彙總後分享給大家,讓其還在深坑中的小夥伴有繩索能爬出來。

同時在這裡也歡迎大家把自己遇到的問題留言或私信給我,我看看其能否給大家解決。

開發環境

  • 系統:windows10
  • 語言:Golang
  • golang版本:1.17

内容

錯誤

在for循環内使用go func進行使用參數時總是使用最後一個對象

造成原因:

由于go func 在建立協程時使用的apiServerAddr采用引用方式造成for循環一定次數後造成内容被覆寫,是以會出現引用同一個存儲值的問題

解決方案:

使用一個新的對象來進行存儲go func中方法使用的參數,例如:

for i,demo := range demoList{
    go func(de string) {
            test(de )
    }(demo )
}      

這裡使用de作為一個新的變量來進行存儲每次循環下的demo值,這時就是産生了一個新的記憶體單元,在其堆棧中使用了新配置設定,當後續循環過程中demo引用的記憶體位址發生了變更也不會影響到go func中之前已經建立好的協程參數,這樣就可以有效避免本次的問題。

本文聲明:

常見問題之Golang——在for循環内使用go func進行使用參數時總是使用最後一個對象

88x31.png

​​知識共享許可協定​​