1. 对于无缓冲信道,在接收者未准备好之前,发送操作是阻塞的.

  1. package main
  2. import "fmt"
  3. func main() {
  4. pipline := make(chan string)
  5. pipline <- "hello world"
  6. fmt.Println(<-pipline)
  7. }

因此,对于解决此问题有两种方法:

  • 使接收者代码在发送者之前执行
  • 使用缓冲信道,而不使用无缓冲信道
  1. package main
  2. func hello(pipline chan string) {
  3. <-pipline
  4. }
  5. func main() {
  6. pipline := make(chan string)
  7. go hello(pipline)
  8. pipline <- "hello world"
  9. }