为了账号安全,请及时绑定邮箱和手机立即绑定

如何捕获通道死锁的异常?

如何捕获通道死锁的异常?

Go
FFIVE 2021-05-21 17:15:15
我正在学习Go,并且正在从GoTours上学习本课程。到目前为止,这就是我所拥有的。package mainimport (    "fmt"    "code.google.com/p/go-tour/tree")// Walk walks the tree t sending all values// from the tree to the channel ch.func Walk(t *tree.Tree, ch chan int) {    if t != nil {        Walk(t.Left, ch)        ch <- t.Value        Walk(t.Right, ch)    }}func main() {    var ch chan int = make(chan int)    go Walk(tree.New(1), ch)    for c := range ch {        fmt.Printf("%d ", c)        }}如您所见,我尝试通过打印输出到通道中的值来测试Walk函数。但是,出现以下错误。1 2 3 4 5 6 7 8 9 10 throw: all goroutines are asleep - deadlock!goroutine 1 [chan receive]:main.main()    main.go:25 +0x85goroutine 2 [syscall]:created by runtime.main    /usr/local/go/src/pkg/runtime/proc.c:221exit status 2我认为应该预料到该错误,因为我从不使用close该通道。但是,有没有一种方法可以“捕获”此死锁错误并以编程方式对其进行处理?
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信