2019-09-15 16:22
浏览 64


In the following code

  1. What happens to goroutine1?(at the end of program we have three goroutine goroutine1 without any functionality)
  2. What happens to channel?(when we make a channel in loop it release the previous channel memory? close it? or something else?)
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")

Run above code here

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douyu4535 2019-09-15 16:51

    For i=1, the loop creates two goroutines, and starts waiting to read from the channel. goroutine2 writes first and terminates. The channel is read, and then i becomes 2. goroutine1 will wait forever, because nobody will read from the channel again. You create a new channel, and do the same thing. When everything is said and done, you have three instances of goroutine1 waiting to write to three different channels.

    解决 无用
    打赏 举报

相关推荐 更多相似问题