Обычный образец того, чего вы пытаетесь достичь, использует WaitGroup
.
Я думаю, что проблема, с которой вы сталкиваетесь, заключается в том, что i
захватывается каждой программой иэто продолжает увеличиваться внешним циклом.Ваш внутренний цикл начинается с i
, и поскольку внешний цикл продолжался, каждая процедура начинается с 5.
Попробуйте передать итератор в качестве параметра в программу, чтобы вы каждый раз получали новую копию.
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();
}
Я не уверен, что вы пытаетесь достичь здесь, каждая процедура выполняет db.Exec
на всех таблицах выше той, с которой она началась, поэтому первая обрабатывает все таблицы, вторая обрабатывает всено первый и тд.Это то, что вы намеревались?