我有一个列表,其中包含一个从中弹出元素的函数,以及另一个“接收”弹出元素的函数。我认为在接收器之后关闭会关闭通道,但是在到达那里之前程序似乎已经死锁了。这样做的最佳方法是什么?我是否应该有另一个通道来检测流行音乐何时完成?
func pop(list *[]int, c chan int) {
if len(*list) != 0 {
result := (*list)[0]
*list = (*list)[1:]
fmt.Println("about to send ", result)
c <- result
} else {
return
}
}
func receiver(c chan int) {
result := <-c
fmt.Println("received ", result)
}
var list = []int{1, 2, 3}
func main() {
fmt.Println("Main")
c := make(chan int)
go pop(&list, c)
go pop(&list, c)
for len(list) > 0 {
receiver(c)
}
close(c) //Dosen't seem to have any effect
fmt.Println("done")
}
人到中年有点甜
相关分类