go select
package main
import (
"fmt"
"runtime"
"sync"
"time"
)
//测试select 加入default和不加default的区别
func test() {
cA, cB := make(chan int), make(chan int)
//为防止在go routines跑完前进程退出
wg := sync.WaitGroup{}
wg.Add(3)
go func() {
defer wg.Done()
cA <- 5
cB <- 6
}()
//select 不加default则会等待有channel过来是才跑一次循环
go func() {
defer wg.Done()
for i := 0; i != 10; i++ {
select {
case _, ok := <-cA:
if ok {
fmt.Printf("ca is receive\n")
}
//为防止routines 2 死锁
case <-time.After(time.Second / 10):
}
}
}()
//select 加了default在没有channel过来时跑default
go func() {
defer wg.Done()
for i := 0; i != 10; i++ {
select {
case _, ok := <-cB:
if ok {
fmt.Printf("cb is receive\n")
}
default:
time.Sleep(time.Second / 10)
fmt.Printf("run in default\n")
}
}
}()
wg.Wait()
}
func main() {
runtime.GOMAXPROCS(1)
test()
}