我使用 go tool 参数运行测试-race,输出--- FAIL: TestRaceCondition (0.00s) testing.go:853: race detected during execution of testfunc TestRaceCondition(t *testing.T) { var map sync.Map for i := 0; i < 10; i++ { go func() { map.Store(strconv.Itoa(i), nil) }() }}我不明白,因为根据文档,Map [...] 对于多个 goroutine 并发使用是安全的,无需额外的锁定或协调。
1 回答
HUH函数
TA贡献1836条经验 获得超4个赞
比赛正在进行中i。通过将值传递给函数而不是引用单个局部变量来修复:
func TestRaceCondition(t *testing.T) {
var map sync.Map
for i := 0; i < 10; i++ {
go func(i int) {
map.Store(strconv.Itoa(i), nil)
}(i)
}
}
i另一种选择是在循环内声明另一个变量:
func TestRaceCondition(t *testing.T) {
var map sync.Map
for i := 0; i < 10; i++ {
i := i // each goroutine sees a unique i variable.
go func() {
map.Store(strconv.Itoa(i), nil)
}()
}
}
- 1 回答
- 0 关注
- 114 浏览
添加回答
举报
0/150
提交
取消