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

我正在学习Go,并且正在从GoTours上学习本课程。到目前为止,这就是我所拥有的。


package main


import (

    "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 +0x85


goroutine 2 [syscall]:

created by runtime.main

    /usr/local/go/src/pkg/runtime/proc.c:221


exit status 2

我认为应该预料到该错误,因为我从不使用close该通道。但是,有没有一种方法可以“捕获”此死锁错误并以编程方式对其进行处理?



FFIVE
浏览 199回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go