1 回答
TA贡献1784条经验 获得超9个赞
您尝试实现的通常模式使用WaitGroup
.
我认为您面临的问题是i
每个 goroutine 都捕获了它,并且它不断被外循环增加。您的内循环从 5 开始i
,并且由于外循环继续进行,每个 goroutine 从 5 开始。
尝试将迭代器作为参数传递给 goroutine,以便每次都能获得一个新副本。
func someFunction(){
....
gos := 5
var wg sync.WaitGroup
wg.Add(gos)
for i:=0; i< gos; i++ {
go func(n int) {
defer wg.Done()
for j:=n; j<len(tables); j+=gos {
r, err := db.Exec(tables[j])
fmt.Println(r)
if err != nil {
methods.CheckErr(err, err.Error())
}
}
}(i)
}
wg.Wait();
}
我不确定你想在这里实现什么,每个 goroutinedb.Exec在它开始的那个上面的所有表上做,所以第一个处理所有表,第二个处理除第一个以外的所有表,依此类推。这是你想要的吗?
- 1 回答
- 0 关注
- 129 浏览
添加回答
举报