常見問題之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中之前已經建立好的協程參數,這樣就可以有效避免本次的問題。
本文聲明:

88x31.png
知識共享許可協定