func literal捕获的循环变量符号



为什么我在操场上得到loop variable symbol captured by func literal,而不是在编译过程中?

package main
import (
"log"
)
func main() {
symbols := []string{"DOGEUSDT", "BTCUSDT", "ETHUSDT"}
for _, symbol := range symbols {
log.Print("aaa ", symbol)
// Create a proc for each symbol so we can handle reconnects.
go func() {
log.Print("bbb ", symbol)

}()
}
}

这只是go vet提醒的一条警告消息。func literal在这里的意思是匿名函数。为了满足go vet,我们需要传递loop variable作为参数。

请检查下面的重构代码。在操场上做榜样。


package main
import (
"log"
)
func main() {
symbols := []string{"DOGEUSDT", "BTCUSDT", "ETHUSDT"}
for _, symbol := range symbols {
log.Print("aaa ", symbol)
// Create a proc for each symbol so we can handle reconnects.
go func(newSymbol string) {
log.Print("bbb ", newSymbol )
}(symbol)
}
}

最新更新