go的select 只会执行一个case,就会退出select 块

 package main
 
 import (
   "fmt"
   "time"
 )
 
 func goRoutineA(a chan int) {
   a<-1
 }
 
 func main() {
     ch := make(chan int)
     go goRoutineA(ch)
   time.Sleep(time.Second*1)
   select{
     case d := <- ch:
     fmt.Println(d)
     default:
     fmt.Println("aaa")
   }
   fmt.Println("will exit..");
 }

  当注释掉 15行的   time.Sleep(time.Second*1 )时, 则会输出 “aaa”.

因为此时, ch这个channel还没有就绪!!

原文地址:https://www.cnblogs.com/oxspirt/p/13993104.html