zoukankan      html  css  js  c++  java
  • Golang之定时器,recover

    滴答滴答……定时器的使用

    package main
    
    import (
        "fmt"
        "time"
    )
    //定时器的使用
    func main() {
        t := time.NewTicker(time.Second)
        //t.C是个channel,背后是个goroutine
        for v := range t.C {
            fmt.Println("hello,", v)
        }
    }

    一次定时器

    package main
    
    import (
        "fmt"
        "time"
    )
    
    //定时器的使用
    func main() {
        select {
        //5秒之后触发
        case <-time.After(5*time.Second):
            fmt.Println("after")
        }
    }

    超时控制

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func queryDb(ch chan int) {
        time.Sleep(time.Second)
        ch <- 100
    }
    func main() {
        ch := make(chan int)
        go queryDb(ch)
        t := time.NewTicker(time.Second)
        select {
        case v := <-ch:
            fmt.Println("result", v)
        case <-t.C:
            fmt.Println("timeout")
        }
    }

     goroutine中使用recover

    应用场景,如果某个goroutine panic了,而且这个goroutine里面没有捕获(recover),
    那么整个进程就会挂掉。所以好的习惯是每当go产生一个goroutine,就需要写下recover

    捕获goroutine的错误

    package main
    
    import (
        "fmt"
        "runtime"
        "time"
    )
    
    func test() {
    
        defer func() {
            if err := recover(); err != nil {
                fmt.Println("panic:", err)
            }
        }()
    
        var m map[string]int
        m["stu"] = 100
    }
    
    func calc() {
        for {
            fmt.Println("i'm calc")
            time.Sleep(time.Second)
        }
    }
    
    func main() {
        num := runtime.NumCPU()
        runtime.GOMAXPROCS(num - 1)
        go test()
        for i := 0; i < 2; i++ {
            go calc()
        }
    
        time.Sleep(time.Second * 10000)
    }
  • 相关阅读:
    ontentEditable和designMode的区别
    execCommand、queryCommandState
    ios微信h5音频audio无法自动播放
    微信二次分享图片不显示
    Airbnb javascript编码规范
    array reduce
    适配iPhoneX全屏
    web前端性能优化
    requestAnimationFrame实现动画
    js 中的forEach,for in ,for of 的使用
  • 原文地址:https://www.cnblogs.com/pyyu/p/8330549.html
Copyright © 2011-2022 走看看