在最近使用了导致数据争用的嵌套循环。go vet
只发现了一些问题。
使用简化版本:
for _, o := range ol {
o := o // <- remove this: `go vet` does *NOT* complain
for _, d := range dl {
d := d // <- remove this: `go vet` will complain
go func() {
fmt.Printf("%03d %03d\n", o, d) // potential data-race
}()
}
}
go vet
正确检测内部竞争条件,但不能正确检测外部竞争条件。
为什么是这样?太复杂而无法跟踪超过 2 层的范围?
慕姐4208626
慕田峪7331174
相关分类