我嘗試在恢復時在通道中發送錯誤 為什么此錯誤未發送到通道?
package main
import (
"fmt"
"sync"
"errors"
)
func main() {
var wg sync.WaitGroup
wg.Add(1)
batchErrChan := make(chan error)
go func(errchan chan error) {
defer func() {
if r := recover(); r != nil {
errchan <- errors.New("recover err")
}
close(batchErrChan)
wg.Done()
}()
panic("ddd")
}(batchErrChan)
go func() {
for _ = range batchErrChan {
fmt.Println("err in range")
}
}()
wg.Wait()
}
https://play.golang.org/p/0ytunuYDWZU
我希望列印“范圍內錯誤”,但事實并非如此。為什么?
uj5u.com熱心網友回復:
你的程式在 goroutine 有機會列印訊息之前結束。嘗試等待它:
...
done:=make(chan struct{})
go func() {
for _ = range batchErrChan {
fmt.Println("err in range")
}
close(done)
}()
wg.Wait()
<-done
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/338486.html
