在下面的代码中会发生什么goroutine1?(在程序结束时我们有三个goroutine1没有任何功能的 goroutine)通道会发生什么?(当我们循环创建一个通道时,它会释放前一个通道内存?关闭它?还是其他什么?)func main() { for i := 1; i <= 3; i += 1 { ch := make(chan int) // gorutine1 go func() { time.Sleep(3 * time.Second) ch <- i fmt.Println("gorutine1 end") }() // gorutine2 go func() { time.Sleep(1 * time.Second) ch <- i+1000 fmt.Println("gorutine2 end") }() fmt.Println("loop", <-ch) } time.Sleep(10 * time.Second) fmt.Println("main end")}
1 回答
互换的青春
TA贡献1797条经验 获得超6个赞
对于i=1
,循环创建两个 goroutine,并开始等待从通道读取。goroutine2 首先写入并终止。通道被读取,然后i
变成2。goroutine1将永远等待,因为没有人会再次从通道读取。您创建一个新频道,然后执行相同的操作。当一切都说完并完成后,您将拥有三个 goroutine1 实例等待写入三个不同的通道。
- 1 回答
- 0 关注
- 90 浏览
添加回答
举报
0/150
提交
取消