Golang:无法在恢复()中向通道发送错误
Posted
技术标签:
【中文标题】Golang:无法在恢复()中向通道发送错误【英文标题】:Golang: Cannot send error to channel in recover() 【发布时间】:2021-12-11 03:04:24 【问题描述】:我尝试在恢复时在频道中发送错误 为什么这个错误没有发送到频道?
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
我希望打印“范围内的错误”,但事实并非如此。为什么?
【问题讨论】:
【参考方案1】:你的程序在 goroutine 有机会打印消息之前结束。尝试等待它:
...
done:=make(chan struct)
go func()
for _ = range batchErrChan
fmt.Println("err in range")
close(done)
()
wg.Wait()
<-done
【讨论】:
以上是关于Golang:无法在恢复()中向通道发送错误的主要内容,如果未能解决你的问题,请参考以下文章
golang os.Create 导致“没有这样的文件或目录”错误