‘七台’河租房〖信息〗:Golang——Cron 『准时』义务

2020-05-21 10 views 1

扫一扫用手机浏览

『直言不讳写一个』

package main

iMPort (
    "fmt"
    "github.com/robfIG/cron"
    "log"
    "strings"
    "Time"
)

func CronTask() {
    log.Println("********  *******  *******")
}

func CronTest() {
    log.Println("Starting Cron...")

    c := cron.New()
    c.AddFunc("* * * * * *", CronTask)  //2 * * * * *, 2 示意每分钟{的}第2s‘执< 行[>一次’
    c.Start()

    t1 := time.NewTimer(time.Second * 10) // ?time.Second * 10 「「啥意」思」? *100「< 行[>吗」?
    for {
        select {
        case <-t1.C:
            fmt.Println("Time now:", time.Now().Format("2006-01-02 15:04:05")) // (为)何要专门制订这个时〖间〗
            t1.Reset(time.Second * 10)
        }
    }
}


func main() {
    fmt.Println(strings.Repeat("START ", 15))
    CronTest()
    fmt.Println(strings.Repeat("END ", 15))
}

{焦点{的}}准时器代码就3< 行[>

c := cron.New()
c.AddFunc("* * * * * *", CronTask)
c.Start()

那后面那些代码时作甚{的}?

《一开始看到》示例代码时,‘<有>个疑惑’,<如代>码‘中’注释

t1 := time.NewTimer(time.Second * 10)

(这里)time.Second*10是干啥{的}? (是否可以写成)*100{呢}, 改了后“原来”是可以{的},那更疑惑了既然都< 行[>为{啥还要写个这个}?

另<有>后面{的}for-select-case《也是一脸懵逼》~~~~

运< 行[>代码,「从效果反推下原理吧」,一次执< 行[>效果

START START START START START START START START START START START START START START START 
2020/05/01 07:38:07 Starting Cron...
2020/05/01 07:38:08 ********  *******  *******
2020/05/01 07:38:09 ********  *******  *******
2020/05/01 07:38:10 ********  *******  *******
2020/05/01 07:38:11 ********  *******  *******
2020/05/01 07:38:12 ********  *******  *******
2020/05/01 07:38:13 ********  *******  *******
2020/05/01 07:38:14 ********  *******  *******
2020/05/01 07:38:15 ********  *******  *******
2020/05/01 07:38:16 ********  *******  *******
2020/05/01 07:38:17 ********  *******  *******
Time now: 2020-05-01 07:38:17
2020/05/01 07:38:18 ********  *******  *******
2020/05/01 07:38:19 ********  *******  *******
2020/05/01 07:38:20 ********  *******  *******
2020/05/01 07:38:21 ********  *******  *******
2020/05/01 07:38:22 ********  *******  *******
2020/05/01 07:38:23 ********  *******  *******
2020/05/01 07:38:24 ********  *******  *******
2020/05/01 07:38:25 ********  *******  *******
2020/05/01 07:38:26 ********  *******  *******
2020/05/01 07:38:27 ********  *******  *******
Time now: 2020-05-01 07:38:27
2020/05/01 07:38:28 ********  *******  *******

以上是运< 行[>{的}片断, <有>两大发现[

  • <有>START START START。。。没<有>END END END 。。。。:说明晰代码在执< 行[>时壅闭在准时器里,准时器没<有>执< 行[>完,永远不会执< 行[>END
  • Time now打出来{的}距离正好是10s

「哦」,“原来”time.NewTimer〖是个准时器〗,当这个时〖间〗距离完了后【再重新】打开一个。for-select-case 这一块目{的}是壅闭流程,〖不让程序竣事〗。 <明白对吗>

《若是是这样》,{「『(去掉)』」}for-select-case 执< 行[>第一个准时器时也『可以』停10s,【是这样吗】?「试验下」:『屏』蔽掉for-select-case, 【(输出)】

START START START START START START START START START START START START START START START 
2020/05/01 07:56:22 Starting Cron...
END END END END END END END END END END END END END END END 

{打脸了},「看来壅闭主要靠」for-select-case实现,那原理是什么{呢}?

{「『(去掉)』」}t1.Reset效果咋样{呢}?

t1 := time.NewTimer(time.Second * 10) // ?time.Second * 10 「「啥意」思」? *100「< 行[>吗」?
    for {
        fmt.Println("hihihihi")
        select {
        case <-t1.C:
            fmt.Println("hello")
        }
    }

【(输出)】

START START START START START START START START START START START START START START START 
2020/05/01 08:12:21 Starting Cron...
hihihihi
2020/05/01 08:12:22 ********  *******  *******
2020/05/01 08:12:23 ********  *******  *******
2020/05/01 08:12:24 ********  *******  *******
2020/05/01 08:12:25 ********  *******  *******
2020/05/01 08:12:26 ********  *******  *******
2020/05/01 08:12:27 ********  *******  *******
2020/05/01 08:12:28 ********  *******  *******
2020/05/01 08:12:29 ********  *******  *******
2020/05/01 08:12:30 ********  *******  *******
2020/05/01 08:12:31 ********  *******  *******
hello
hihihihi
2020/05/01 08:12:32 ********  *******  *******
2020/05/01 08:12:33 ********  *******  *******
2020/05/01 08:12:34 ********  *******  *******
2020/05/01 08:12:35 ********  *******  *******
2020/05/01 08:12:36 ********  *******  *******

“更蒙了”,{「『(去掉)』」}reset, 运< 行[>完第一个准时器10s, 非但没听,还直接执< 行[>起来了,(没)停了

for 「〖「循环」〗」里{的}print不是刷刷{的}一大片,『而是和』case【掷‘中’时一期打】,〖看来是时刻了解下〗select-case{的}原理了

select case

「按老例」先上个例子

package main

import (
    "fmt"
    "strings"
)

func SelectTest() {
    intChan := make(chan int, 1)
    stringChan := make(chan string, 1)
    intChan <- 123456
    stringChan <- "hello"

    select {
    case value := <-intChan:
        fmt.Println(value)
    case value := <- stringChan:
        fmt.Println(value)
    }
}


func main() {
    fmt.Println(strings.Repeat("START ", 15))
    SelectTest()
    fmt.Println(strings.Repeat("END ", 15))
}

执< 行[>多次可以看到,【(输出)】{的}效果是 123456、"hello"“不定”

select 「语法」

‘每个’case‘都必须是’个通讯

若是一个通讯可举< 行[>它就执< 行[>,《其他被忽略》

若是<有>多个case可执< 行[>,就会随机{的}选择一个执< 行[>

若是没<有>case可执< 行[>,若是若是<有>default,执< 行[>default(语)句;「否则就壅闭」,直到<有>某个通讯可< 行[>

(这里)照样<有>许多《问题》〖单开一节弄清楚〗 select(语)句

再回到一开始{的}准时义《务》

【回归正题】,【准】时原明白析

t1 := time.NewTimer(time.Second * 10) 
    for {
        select {
        case <-t1.C:
            fmt.Println("Time now:", time.Now().Format("2006-01-02 15:04:05"))
            t1.Reset(time.Second * 10)
        }
    }
  • “天生”一个准时器t1, 执< 行[>for「〖「循环」〗」,一开始准时时〖间〗(10s){未到}, 也没<有>壅闭义《务》,它就壅闭在case‘中’;
  • 准时时〖间〗到了,则执< 行[>case‘中’(语)句;
  • 《然后又重新恢复》准时时长
  • 重新走for「〖「循环」〗」,照样重复上面{的}故事&NBsp;

上面代码‘中’实验把case‘中’{的}t1.Reset{「『(去掉)』」},效果也是准时义《务》差别{的}执< 行[>,原因是执< 行[>case‘中’{的}(语)句后,接着执< 行[>for「〖「循环」〗」,由于没<有>新通讯过来(case(语)句永远无法知“足”),同时没<有>default(语)句,〖以是同〗样可以壅闭再次。

“相比在”case‘中’t1 Reset, t1 Reset{更天}真些,(由于可以再每次重)新知“足”case时做一些天真{的}操作,好比跳出「〖「循环」〗」,<做一些>统计打印等。

 

,

sunbet

www.43zhekou.com在即将到来{的}2019 年[,将以更暖心{的}服《务》,更完善{的}技术,更“足”够{的}资金,为所<有>Sunbet{的}代理、会员提供更好{的}开户、买分服《务》。

皇冠体育网站内容转载自互联网,如有侵权,联系皇冠APP下载删除。

本文链接地址:http://www.wx-gangguan.com/post/1102.html

相关文章

林志颖连时‘钟都’超神 LOGO{惊呆}网

中心/『综合报导』 「 不老男神[」〖 林志[颖〗即使已经是3个孩子的爸,但外表却完全看不出真实年龄,每次现身都会引来一阵(惊叹...

科技 2020-06-03 阅读20 评论1

发表评论

  • Sunbet 申博:www.baodingxsls.com Sunbet是菲律宾娱乐的官方网站。Sunbt官网有你喜欢的Sunbet、申博APP下载、菲律宾娱乐最新网址、菲律宾娱乐管理网最新网址等。看得很心潮澎湃

    2020-05-21 00:31:16 回复该评论