以下是给我带来问题的代码。我想要实现的是并行创建那么多表。创建所有表后,我想退出函数。
func someFunction(){
....
gos := 5
proc := make(chan bool, gos)
allDone := make(chan bool)
for i:=0; i<gos; i++ {
go func() {
for j:=i; j<len(tables); j+=gos {
r, err := db.Exec(tables[j])
fmt.Println(r)
if err != nil {
methods.CheckErr(err, err.Error())
}
}
proc <- true
}()
}
go func() {
for i:=0; i<gos; i++{
<-proc
}
allDone <- true
}()
for {
select {
case <-allDone:
return
}
}
}
我正在创建两个通道 1 来跟踪创建的表数 (proc) 和其他 (allDone) 以查看是否全部完成。
当我运行此代码时,创建表的 go 例程开始执行,但在它完成之前 someFunction 被终止。
但是如果顺序运行代码没有问题
我的设计模式有什么错误以及如何纠正它。