上一段代码:
package main
import (
"fmt"
)
func f1(in chan int) {
fmt.Println(<-in)
}
func main() {
out := make(chan int)
out <- 2
go f1(out)
}
这是不能编译的,提示说:
fatal error: all goroutines are asleep - deadlock!
有死锁,但是讲道理的话,是没有的。
如果我硬要让这段代码能编译通过呢?
改成如下代码;
func main() {
out := make(chan int)
go f1(out)
out <- 2
}
讲道理,这和上一段没有什么实质的变化。那么问题来了,我再来一个go func,会产生死锁的那种,看看行还是不行。
代码如下:
func main() {
out := make(chan int)
go f1(out)
out <- 2
go f2(out)
time.Sleep(1e9)
}
好吧,只要对chan后再进行go,就不会有什么问题了。