Golang极简入门教程(三):并发支持

2019-11-10 09:01:54王旭

        // 控制此线程退出
        case <-quit:
            fmt.Println("quit")
            return
        }
    }
}
 
func main() {
    c := make(chan int)
    quit := make(chan int)
    go func() {
        for i := 0; i < 10; i++ {
            fmt.Println(<-c)
        }
        quit <- 0
    }()
    fibonacci(c, quit)
}

select 中的 default 会在没有任何 case 可执行时执行(类似于 switch):


package main
 
import (
    "fmt"
    "time"
)
 
func main() {
    // 创建一个 tick channel
    // 在 100 毫秒后会向 tick channel 中发送当前时间
    tick := time.Tick(100 * time.Millisecond)
    // 创建一个 boom channel
    // 在 500 毫秒后会向 boom channel 中发送当前时间
    boom := time.After(500 * time.Millisecond)
    for {
        select {
        case <-tick:
            fmt.Println("tick.")
        case <-boom:
            fmt.Println("BOOM!")
            return
        default:
            fmt.Println("    .")
            time.Sleep(50 * time.Millisecond)
        }
    }
}