递归前序遍历,重点保证信道是在递归完后再关闭,因此 close(ch) 必须和递归放在同一个协程内(同步代码块)。
for range 自动停止读取信道。如果不用 range,需要取值时手动判断信道是否关闭,适时 break。
如果信道一直没关闭导致阻塞到其他所有的 go routine 都阻塞或结束了,会报一个deadlock 的错误。如果信道在读取完闭前关闭,会 panic。
package main
import "golang.org/x/tour/tree"
import "fmt"
// Walk 步进 tree t 将所有的值从 tree 发送到 channel ch。
func Walk(t *tree.Tree, ch chan int) {
if t.Left != nil {
Walk(t.Left

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



