美文网首页
channel中select的应用及超时处理

channel中select的应用及超时处理

作者: 七八个星天 | 来源:发表于2019-07-23 19:46 被阅读0次

    一、利用select,实现斐波那契数列

    package main
    
    import (
        "fmt"
        "runtime"
    )
    
    func fibonacci(ch <-chan int, quit <-chan bool) {
        for {
            select {
            case num := <-ch:
                fmt.Printf("%d ", num)
            case <-quit:
                runtime.Goexit()
            }
        }
    }
    func main() {
        x, y := 1, 1
        ch := make(chan int)
        quit := make(chan bool)
        go fibonacci(ch, quit)
        for i := 0; i < 100; i++ {
            ch <- x
            x, y = y, x+y
        }
        quit <- true
    
    }
    
    

    二、利用time.After实现超时处理

    package main
    
    import (
        "fmt"
        "runtime"
        "time"
    )
    
    func main() {
        ch := make(chan int)
        quit := make(chan bool)
        i := 0
        go func() {
            for {
                i++
                fmt.Printf("第%d次\n", i)
                select {
                case <-time.After(time.Second * 5): //设定5秒超时
                    fmt.Println("超时")
                    quit <- true
                    runtime.Goexit()
                case num := <-ch:
                    fmt.Println(num)
    
                }
            }
        }()
        for i := 0; i < 5; i++ {
            time.Sleep(time.Second*2)
            ch <- i
        }
        <-quit
    }
    
    

    相关文章

      网友评论

          本文标题:channel中select的应用及超时处理

          本文链接:https://www.haomeiwen.com/subject/retzlctx.html