c语言编程笔录

首页 >   > 笔记大全

笔记大全

golang延时用法

更新时间:2023-12-28

第一段:延时的基本用法

在golang中,延时可以用来使程序在一定时间内休眠,或者在某个时间点执行某段程序。

    package main

    import (
      "fmt"
      "time"
    )

    func main() {
      fmt.Println("程序开始执行")
      time.Sleep(time.Second * 3) // 休眠3秒
      fmt.Println("3秒后执行")
    }
  

以上代码中,我们通过使用time.Sleep()函数达到了延时的目的。这个函数接收一个Duration类型的参数,我们可以指定要休眠的时间长度。

第二段:延时实现定时任务

延时除了可以实现休眠的效果,还能够用来实现定时任务,比如每隔一段时间执行一次某个任务。

    package main

    import (
      "fmt"
      "time"
    )

    func main() {
      fmt.Println("程序开始执行")
      ticker :=time.NewTicker(time.Second) // 创建一个ticker,每隔一秒执行一次
      for range ticker.C {
        fmt.Println("每秒执行一次")
      }
    }
  

以上代码中,我们使用time.NewTicker()函数创建了一个ticker,它会每隔一秒向其通道中发送一个事件,然后我们使用for循环加range来不断读取通道中的事件,实现每隔一秒执行一次某个任务的效果。

第三段:延时实现超时检测

在进行一些耗时操作时,我们可能需要限制这些操作的时长,以避免卡死整个程序。这时候就可以利用延时来实现超时检测。

    package main

    import (
      "fmt"
      "time"
    )

    func main() {
      fmt.Println("程序开始执行")
      ch :=make(chan bool, 1)
      go func() {
        time.Sleep(time.Second * 3) // 模拟耗时操作,延时3秒
        ch <- true
      }()
      select {
      case <-ch:
        fmt.Println("操作成功")
      case <-time.After(time.Second * 2): // 超时时间为2秒
        fmt.Println("操作超时")
      }
    }
  

以上代码中,我们使用select来处理多个通道,当ch通道中有数据时,执行“操作成功”的分支;当代码执行超过2秒时,执行“操作超时”的分支。

第四段:使用time.AfterFunc实现延时执行函数

除了使用time.Sleep函数延时执行代码外,我们还可以通过time包提供的AfterFunc函数实现延时执行某个函数。

    package main

    import (
      "fmt"
      "time"
    )

    func main() {
      fmt.Println("程序开始执行")
      time.AfterFunc(time.Second*3, func() {
        fmt.Println("3秒后执行")
      })
      time.Sleep(time.Second * 4)
      fmt.Println("程序结束执行")
    }
  

以上代码中,我们使用time.AfterFunc函数创建了一个定时任务,3秒后执行传入的函数,然后我们通过time.Sleep函数保证程序不会在定时任务执行之前结束。这样,我们就可以在指定的时间点执行某段代码了。

总结

本文介绍了golang中延时的基本用法、延时实现定时任务、延时实现超时检测和使用time.AfterFunc实现延时执行函数。

golang中的延时函数非常灵活,可以用于多种场景,需要根据不同的需求来选择不同的方式。