我正在学习 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
这个频道。但是,有没有办法我可以“捕捉”这个死锁错误并以编程方式处理它?