【发布时间】:2014-04-29 05:58:53
【问题描述】:
当尝试解决 Go Tour 中 Equivalent Binary Trees 问题的树遍历部分时,显而易见的解决方案是使用 recursion。其他解决方案(例如闭包)在general question 的回答中提供了有关如何解决问题的方法。
我最初的想法是在步行的每一步都使用一个 Goroutine。这不是更好、更 Go-onic(Pythonic 的 Go 等价物是什么?)解决方案吗?问题是我不知道如何 A)在树被走完后关闭通道,或 B)以其他方式发出树走完成的信号。较早的example 使用 2 个通道,一个用于数据,一个用于退出信号。通过第二个通道不符合问题定义,并且步行完成的根本问题仍然存在。是否有一个优雅的解决方案,每个步行步骤都有一个 Goroutine,或者递归是最好的解决方案?
func Walk(t *tree.Tree, ch chan int) {
if t != nil {
go Walk(t.Left, ch)
ch <- t.Value
go Walk(t.Right, ch)
}
//Done with this node, how do I know when all are done?
}
【问题讨论】:
-
有趣的是,Andrew Gerrand(Go 团队的成员)最近在 Gophercon 上的一次演讲谈到了这一点:talks.golang.org/2014/go4gophers.slide#27