首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >游游练习7:关闭频道

游游练习7:关闭频道
EN

Stack Overflow用户
提问于 2019-07-04 12:25:11
回答 1查看 37关注 0票数 0

在Go巡回赛中有一个关于二叉树的exercise

我已经解决了这个问题,一些问题在路上出现了。

这是树的结构

代码语言:javascript
复制
type Tree struct {
    Left  *Tree
    Value int
    Right *Tree
}

这是一些代码

代码语言:javascript
复制
//send values into channel
func Walk(t *tree.Tree, ch chan int){
    if t.Left != nil{
        Walk(t.Left, ch)
    }
    ch <- t.Value 
    if t.Right != nil{
        Walk(t.Right,ch)
    }
        
    //close(ch) will trigger a warning: close of a closed channel
}

//get values from channel
func main() {
    ch := make(chan int, 10)
    go Walk(tree.New(1),ch)

    //for i:=0;i<10;i++{  // This line works.
    for i:= range ch{     // This line doesn't,
                          // it reads infinitely from ch.
        println(i)  
    }
}

我的问题是在主函数中,它清楚地表明ch没有关闭,那么为什么我不能关闭Walk函数中的通道呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-04 13:01:14

因为函数是递归的,因此,Walk的每个调用都将到达关闭通道的行,并且每个调用都会试图关闭通道。因此,在第一个通道之后试图关闭通道的任何一个都将试图关闭一个封闭通道。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56880628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档