Golang中如何处理goroutine的错误
Golang中如何处理goroutine的错误 在我的代码中,有一个函数用于从数据库获取不同ID的数据,因此我为每个ID使用了Go协程。但如果任何协程遇到错误,该如何处理?我卡在这里了。
以下是我的代码片段:
func BStat(ID string) (t []string, err error) {
var wg sync.WaitGroup
var e error
ch1 := make(chan string)
ch2 := make(chan error)
defer close(ch1)
defer close(ch2)
for i:=0 ; i <10 :i++ {
wg.Add(1)
go GetStat(ID, ch1, ch2 , &wg)
}
for i:=0 ; i <10 :i++{
e = <- ch2
if e != nil { // 如何正确处理错误
fmt.Println("Heloooooooooooooooo")
break
//return nil, errors.New("error in generating report ")
}
Stat, ok := <-ch1
if ok == true {
t = append(t, Stat)
}
}
wg.Done()
return t, e
}
func GetStat( Id uint64, ch1 chan<- []string , ch2 chan<- bool , wg *sync.WaitGroup) {
stat, err := store.GetName(db, i) // 从数据库获取值
if err != nil {
logger.WithError(err)
ch2 <- true
ch1 <- ""
}
ch2 <- false
ch1 <- stat
}
我的Go协程卡住了,请建议我如何处理输出以及错误情况。
提前感谢
更多关于Golang中如何处理goroutine的错误的实战教程也可以访问 https://www.itying.com/category-94-b0.html
4 回复
你可以使用 errgroup
我很难理解这段代码。我一开始把它放到了Go Playground里,但它无法构建:https://play.golang.org/p/mYwthC8_qxj
根据你调用GetStat时传入的参数(而不是GetStat接受的参数),看起来GetStat应该从ch1读取输入,并将其接收到的任何错误写入ch2。


