最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語(yǔ)言定時(shí)器Timer和Ticker的使用與區(qū)別

 更新時(shí)間:2024年07月24日 09:47:08   作者:CodeJR  
在Go語(yǔ)言中內(nèi)置的有兩個(gè)定時(shí)器,Timer和Ticker,本文主要介紹了Go語(yǔ)言定時(shí)器Timer和Ticker的使用與區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下

概述

在日常開(kāi)發(fā)中,我們不可避免的需要使用到定時(shí)任務(wù)用來(lái)處理業(yè)務(wù)邏輯。在Go語(yǔ)言中內(nèi)置的有兩個(gè)定時(shí)器,Timer和Ticker,合理的使用這兩個(gè)定時(shí)器可以很好的解決定時(shí)任務(wù)的需求,同時(shí)除了這兩個(gè)內(nèi)置的定時(shí)器外,還有另外的三方庫(kù)也可以用來(lái)完成定時(shí)任務(wù)的需求。

Timer

簡(jiǎn)介

Timer定時(shí)器可以在指定時(shí)間后執(zhí)行一次,使用time包中的NewTimer方法傳入間隔時(shí)間參數(shù)即可創(chuàng)建一個(gè)Timer定時(shí)器,定時(shí)器將會(huì)在指定的時(shí)間后執(zhí)行一次。

Timer中共有以下方法可調(diào)用

// 創(chuàng)建
func NewTimer(d Duration) *Timer
// 重置
func (t *Timer) Reset(d Duration) bool
// 停止
func (t *Timer) Stop() bool

在Timer中除了有以上方法之外,還有最重要的就是Timer中包含一個(gè)時(shí)間類型的通道C,當(dāng)指定時(shí)間間隔到達(dá)后,就會(huì)將當(dāng)前時(shí)間發(fā)送到通道C中,這樣我們可以使用select監(jiān)聽(tīng)通道C即可完成在指定時(shí)間后執(zhí)行任務(wù)的需求。

基礎(chǔ)用法

我們根據(jù)上面的描述,完成了下面的代碼:

func main() {
    // 創(chuàng)建一個(gè)Timer定時(shí)器
    timer := time.NewTimer(time.Second * 2)
    // 延遲關(guān)閉定時(shí)器
    defer timer.Stop()
    fmt.Println("當(dāng)前時(shí)間:", time.Now())
    select {
        // 使用select監(jiān)聽(tīng)通道C
        case nowTime := <-timer.C:
        fmt.Println("間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間:", nowTime)
    }
}

在idea中運(yùn)行代碼后會(huì)輸出以下內(nèi)容:

當(dāng)前時(shí)間: 2024-06-30 15:12:08.7736065 +0800 CST m=+0.002108801
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:12:10.7797079 +0800 CST m=+2.008210201

Process finished with the exit code 0

可以看到,Timer定時(shí)器在指定時(shí)間后會(huì)執(zhí)行一次任務(wù),然后結(jié)束。

Reset使用

在上面的代碼中可以看到Timer在指定時(shí)間后僅能執(zhí)行一次任務(wù),但是我們可以使用Reset方法重置定時(shí)器,這樣的話可以在每次執(zhí)行任務(wù)后重置,用來(lái)達(dá)到每間隔指定時(shí)間都執(zhí)行一次任務(wù)的需求。

將代碼略做修改如下:

func main() {
    // 創(chuàng)建一個(gè)Timer定時(shí)器
    timer := time.NewTimer(time.Second * 2)
    // 延遲關(guān)閉定時(shí)器
    defer timer.Stop()
    fmt.Println("當(dāng)前時(shí)間:", time.Now())
    for {
        timer.Reset(time.Second * 2)
        select {
        // 使用select監(jiān)聽(tīng)通道C
        case nowTime := <-timer.C:
            fmt.Println("間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間:", nowTime)
        }
    }
}

在上面代碼中可以看到在每次的循環(huán)中都重置一次Timer定時(shí)器,這樣的話就可以實(shí)現(xiàn)每隔一段時(shí)間都執(zhí)行一次任務(wù)的需求。

最終運(yùn)行結(jié)果如下:

當(dāng)前時(shí)間: 2024-06-30 15:16:01.2907834 +0800 CST m=+0.002052801
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:16:03.3096846 +0800 CST m=+2.020954001
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:16:05.3236498 +0800 CST m=+4.034919201
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:16:07.3318153 +0800 CST m=+6.043084701
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:16:09.3462966 +0800 CST m=+8.057566001
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:16:11.3504773 +0800 CST m=+10.061746701
……

Ticker

簡(jiǎn)介

Ticker定時(shí)器的用法和Timer定時(shí)器的用法以及內(nèi)置的方法都一樣,區(qū)別在于Ticker不僅僅只執(zhí)行一次,而是會(huì)根據(jù)指定的時(shí)間間隔不停地執(zhí)行。

基礎(chǔ)用法

代碼如下:

func main() {
    ticker := time.NewTicker(time.Second * 2)
    defer ticker.Stop()
    fmt.Println("當(dāng)前時(shí)間:", time.Now())
    for {
        select {
        case nowTime := <-ticker.C:
            fmt.Println("間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間:", nowTime)
        }
    }
}

根據(jù)Ticker寫(xiě)出以上代碼,代碼會(huì)每隔2秒執(zhí)行一次,不需要像Timer中那樣每次使用Reset方法來(lái)重置定時(shí)器,最終運(yùn)行結(jié)果如下:

當(dāng)前時(shí)間: 2024-06-30 15:20:27.4070592 +0800 CST m=+0.002137901
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:20:29.4083801 +0800 CST m=+2.003458801
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:20:31.414517 +0800 CST m=+4.009595701
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:20:33.4191099 +0800 CST m=+6.014188601
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:20:35.4099723 +0800 CST m=+8.005051001
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:20:37.4208446 +0800 CST m=+10.015923301
……

在Ticker定時(shí)器中同樣也有Reset方法,但是就算不調(diào)用Reset方法定時(shí)器也會(huì)一直執(zhí)行,所以這里的Reset方法可以用來(lái)重置定時(shí)器的間隔時(shí)間。

區(qū)別

  • Ticker定時(shí)器表示每隔一段時(shí)間就執(zhí)行一次,一般可執(zhí)行多次。
  • Timer定時(shí)器表示在一段時(shí)間后執(zhí)行,默認(rèn)情況下只執(zhí)行一次,如果想再次執(zhí)行的話,每次都需要調(diào)用Reset方法,此時(shí)效果類似Ticker定時(shí)器。同時(shí)也可以調(diào)用Stop方法取消定時(shí)器。

到此這篇關(guān)于Go語(yǔ)言定時(shí)器Timer和Ticker的使用與區(qū)別的文章就介紹到這了,更多相關(guān)Go語(yǔ)言定時(shí)器Timer和Ticker內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Go Asynq異步任務(wù)處理的實(shí)現(xiàn)

    Go Asynq異步任務(wù)處理的實(shí)現(xiàn)

    Asynq是一個(gè)新興的異步任務(wù)處理解決方案,它提供了輕量級(jí)的、易于使用的API,本文主要介紹了Go Asynq異步任務(wù)處理的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-06-06
  • Go gRPC環(huán)境安裝教程示例詳解

    Go gRPC環(huán)境安裝教程示例詳解

    這篇文章主要為大家介紹了Go gRPC環(huán)境安裝的教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Golang 之區(qū)分類型別名與類型定義的方法

    Golang 之區(qū)分類型別名與類型定義的方法

    這篇文章主要介紹了Golang 之區(qū)分類型別名與類型定義的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • golang中接口對(duì)象的轉(zhuǎn)型兩種方式

    golang中接口對(duì)象的轉(zhuǎn)型兩種方式

    這篇文章主要介紹了golang中接口對(duì)象的轉(zhuǎn)型方式,大家都知道接口對(duì)象的轉(zhuǎn)型有兩種方式,文中通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • Go語(yǔ)言題解LeetCode888公平糖果交換示例詳解

    Go語(yǔ)言題解LeetCode888公平糖果交換示例詳解

    這篇文章主要為大家介紹了Go語(yǔ)言題解LeetCode888公平糖果交換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Go標(biāo)準(zhǔn)庫(kù)http?server的優(yōu)雅關(guān)閉深入理解

    Go標(biāo)準(zhǔn)庫(kù)http?server的優(yōu)雅關(guān)閉深入理解

    這篇文章主要為大家介紹了Go標(biāo)準(zhǔn)庫(kù)http?server的優(yōu)雅有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪關(guān)閉深入理解
    2024-01-01
  • 一文掌握Go語(yǔ)言并發(fā)編程必備的Mutex互斥鎖

    一文掌握Go語(yǔ)言并發(fā)編程必備的Mutex互斥鎖

    Go 語(yǔ)言提供了 sync 包,其中包括 Mutex 互斥鎖、RWMutex 讀寫(xiě)鎖等同步機(jī)制,本篇博客將著重介紹 Mutex 互斥鎖的基本原理,需要的可以參考一下
    2023-04-04
  • golang如何替換換行符

    golang如何替換換行符

    這篇文章主要介紹了golang如何替換換行符問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Golang使用cobra實(shí)現(xiàn)命令行程序的示例代碼

    Golang使用cobra實(shí)現(xiàn)命令行程序的示例代碼

    Cobra 是 Go 語(yǔ)言中一個(gè)強(qiáng)大的命令行應(yīng)用庫(kù),它提供了創(chuàng)建命令行工具所需的基本結(jié)構(gòu)和功能,被許多開(kāi)發(fā)者用于構(gòu)建各種命令行工具和應(yīng)用程序,本文將給大家介紹Golang使用cobra實(shí)現(xiàn)命令行程序,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • go中string、int、float相互轉(zhuǎn)換的實(shí)現(xiàn)示例

    go中string、int、float相互轉(zhuǎn)換的實(shí)現(xiàn)示例

    本文主要介紹了go中string、int、float相互轉(zhuǎn)換的實(shí)現(xiàn)示例,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論

湄潭县| 绥滨县| 尚义县| 西昌市| 根河市| 阿城市| 鞍山市| 安达市| 金湖县| 香河县| 山丹县| 渭南市| 莎车县| 静宁县| 巴南区| 绥滨县| 巍山| 镇沅| 桃源县| 当涂县| 紫云| 海口市| 龙南县| 惠东县| 上犹县| 卢龙县| 甘孜县| 灵宝市| 南木林县| 永胜县| 江孜县| 抚顺县| 鱼台县| 怀安县| 乐清市| 惠东县| 绵阳市| 新平| 磴口县| 南通市| 海宁市|