英文:
golang closure catch wrong value from range
问题
以下是翻译好的代码:
func main() {
lans := [5]string{"java", "python", "erlang", "cpp", "go"}
fin := make(chan bool)
for _, l := range lans {
go func(lang string) {
fmt.Println(lang)
}(l)
}
<-fin
}
我认为输出应该是:java, python, erlang, cpp, go;
但实际输出是:
go go go go go;
这里出了什么问题?
英文:
test codes below:
func main() {
lans := [5]string{"java", "python", "erlang", "cpp", "go"}
fin := make(chan bool)
for _, l := range(lans) {
go func() {
fmt.Println(l)
}()
}
<- fin
}
I think the output will be: java, python, erlang, cpp, go;
but the output is:
go go go go go;
what's wrong here?
答案1
得分: 2
请将函数写成以下形式,以捕获动词 l
并传入函数中:
go func(l string) {
fmt.Println(l)
}(l)
英文:
just write the function like this, to catch the verb l
into function
go func(l string) {
fmt.Println(l)
}(l)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论