我正在尝试重新实现/修改这篇文章的第二条评论的代码。
我想要多个 go 例程从堆栈中弹出元素(只要堆栈包含某些内容),并使用另一个函数来捕获它们。
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)
receiver(c)
fmt.Scan()
如果我使receiver(c) 成为一个go 例程,则只会打印“Main”,并且程序将退出而不等待Scan() 函数。即使添加 time.Sleep(2) 也不会阻止程序退出。
为什么我的程序在没有任何输入的情况下退出?
慕婉清6462132
相关分类