call f1...
package main

import (
    "fmt"
)

func f1() {
    for {
        fmt.Println("call f1...")
    }
}

func f2() {
    fmt.Println("call f2...")
}

func main() {
    go f1()
    go f2()
    ch := make(chan int)
    <-ch
}
go f1()
fatal error: all goroutines are asleep - deadlock!

代码如下:

package main

import (
    "fmt"
)

func f1() {
    for {
        fmt.Println("call f1...")
    }
}

func f2() {
    fmt.Println("call f2...")
}

func main() {
    // go f1()
    go f2()
    ch := make(chan int)
    <-ch
}

为什么同是调用协程,调用f1不会产生死锁,而调用f2会产生死锁。是因为f1有死循环么?按说没有协程往通道ch写,在main中读取ch应该都会产生死锁,是不是我理解错了,求解答。谢谢!