1 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個贊
您嘗試實(shí)現(xiàn)的通常模式使用WaitGroup
.
我認(rèn)為您面臨的問題是i
每個 goroutine 都捕獲了它,并且它不斷被外循環(huán)增加。您的內(nèi)循環(huán)從 5 開始i
,并且由于外循環(huán)繼續(xù)進(jìn)行,每個 goroutine 從 5 開始。
嘗試將迭代器作為參數(shù)傳遞給 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();? ? ?
}
我不確定你想在這里實(shí)現(xiàn)什么,每個 goroutinedb.Exec在它開始的那個上面的所有表上做,所以第一個處理所有表,第二個處理除第一個以外的所有表,依此類推。這是你想要的嗎?
- 1 回答
- 0 關(guān)注
- 158 瀏覽
添加回答
舉報(bào)