下面是一个例子:如何在同一个循环内向/从通道发送和接收值?
func main() {
c := make(chan int)
i := 0
go goroutine(c)
c <- i
time.Sleep(10 * time.Second)
}
func goroutine(c chan int) {
for {
num := <- c
fmt.Println(num)
num++
time.Sleep(1 * time.Second)
c <- num
}
}
我试图够程中执行的任务是从通道接收号码,打印,增量和一个后第二次发回的通道。在此之后,我想重复这一行动。
但是,结果是,操作只进行一次。
输出:
0
我做错什么了吗?
谢谢大家了详细的解释。 – RhinoLarva
请注意,在启动第二个goroutine后,您的最后一个'main()'函数会返回,因此程序可能会立即退出(它不会等待非'main' goroutine完成)。它可能是'pump()'而'receive()'甚至不会被调用。 – icza