case 一般配合 switch, select 使用
swith
case 分支会从上到下执行,一个一个执行分支case 后面的条件判断。
select
所有case 分支右边到 :为止的代码,都会执行
func main() {
select {
case <- A():
fmt.Println("case A")
case <- B():
fmt.Println("case B")
}
}
func A() chan int {
fmt.Println("this is A")
c := make(chan int, 1)
c <- 1
return c
}
func B() chan int {
fmt.Println("this is B")
c := make(chan int, 2)
c <- 1
return c
}
输出
···
this is A
this is B
case B
···
select 这里极易出现内存泄漏。for 死循环执行time.After()
for {
select {
case <-A():
fmt.Println("case A")
case <-B():
fmt.Println("case B")
case <-time.After(5 * time.Minute):
fmt.Println("this time after")
}
}