В go-tour есть упражнение о бинарном дереве.
Я уже решил этот вопрос, и на пути возникло несколько вопросов.
вот структура дерева
type Tree struct {
Left *Tree
Value int
Right *Tree
}
вот какой-то код
//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 because it reads
//infinitely from ch
println( i)
}
Мой вопрос в основной функции, она ясно показывает, что ch не закрывался, тогда почему я не могу закрыть канал в функции Walk?