错误
values := []string{"a", "b", "c"}
for _, v := range values {
go func() {
fmt.Println(v)
}()
}
// out: c
// 只输出了一个c,或者啥也没输出
原因:
在 for 中开启 goroutine
其在 main goroutine 运行完成之后,可能其它 goroutine 还没有得到运行机会,就结束了,就会啥也没输出
只输出一个C,应该是在 goroutine中取到的 变量地址,也有可能是for循环到最后一个元素之后,其它goroutine才运行,这时取到的就是最后一个值
解决:
for _, v := range values {
go func(u string) {
fmt.Println(u)
}(v) //明确值复制,作为栈变量
}
错误:
list := make(map[int]*Link)
for _, lnk := range linktree {
list[lnk.Code] = &lnk
}
解决:
list := make(map[int]*Link)
for _, lnk := range linktree {
var lnk = linktree
list[lnk.Code] = &lnk
}