blocking.go
package main
import (
"fmt"
)
func f1(in chan int) {
fmt.Println(<-in)
}
func main() {
out := make(chan int)
out <- 2
go f1(out)
}
定义通道时如果不传第二个值,那这个通道就是无缓冲通道,如果接收者未准备好接受数据,那这个通道就是阻塞的,所以要把f1放到out <- 2上边,同时如果f1没用go关键字启动协程的话会一直等待数据,同样造成阻塞。
关于 LearnKu
定义通道时如果不传第二个值,那这个通道就是无缓冲通道,如果接收者未准备好接受数据,那这个通道就是阻塞的这句话说的是,如果接收者没有准备好,那消息就不会发送出去,这个操作不会成功并且会阻塞在这里。所以会报deadlock。