当前位置: 首页 > 面试题库 >

Golang中午运行代码

鱼宜
2023-03-14
问题内容

是否可以每天中午执行代码?该程序将在其余的运行时间中处理用户输入,但需要在中午运行一个函数以输出一些文本。最有效的方法是什么?


问题答案:

因此,您需要间隔计时器每天每天中午运行一项功能,您可以使用:
timer.AfterFunc()time.Tick()time.Sleep()time.Ticker

首先,在程序启动时,计算直到下一个正午的启动时间间隔,并使用一些等待(例如time.Sleep或…),然后24 * time.Hour在下一个间隔中使用 间隔。

示例代码使用time.Sleep

package main

import "fmt"
import "time"

func noonTask() {
    fmt.Println(time.Now())
    fmt.Println("do some job.")
}
func initNoon() {
    t := time.Now()
    n := time.Date(t.Year(), t.Month(), t.Day(), 12, 0, 0, 0, t.Location())
    d := n.Sub(t)
    if d < 0 {
        n = n.Add(24 * time.Hour)
        d = n.Sub(t)
    }
    for {
        time.Sleep(d)
        d = 24 * time.Hour
        noonTask()
    }
}
func main() {
    initNoon()
}

并且您可以将main更改为此(或您需要的任何内容):

func main() {
    go initNoon()

    // do normal task here:
    for {
        fmt.Println("do normal task here")
        time.Sleep(1 * time.Minute)
    }
}

使用timer.AfterFunc

package main

import (
    "fmt"
    "sync"
    "time"
)

func noonTask() {
    fmt.Println(time.Now())
    fmt.Println("do some job.")
    timer.AfterFunc(duration(), noonTask)
}
func main() {
    timer.AfterFunc(duration(), noonTask)
    wg.Add(1)
    // do normal task here
    wg.Wait()
}

func duration() time.Duration {
    t := time.Now()
    n := time.Date(t.Year(), t.Month(), t.Day(), 12, 0, 0, 0, t.Location())
    if t.After(n) {
        n = n.Add(24 * time.Hour)
    }
    d := n.Sub(t)
    return d
}

var wg sync.WaitGroup

使用time.Ticker

package main

import (
    "fmt"
    "sync"
    "time"
)

var ticker *time.Ticker = nil

func noonTask() {
    if ticker == nil {
        ticker = time.NewTicker(24 * time.Hour)
    }
    for {
        fmt.Println(time.Now())
        fmt.Println("do some job.")
        <-ticker.C
    }
}
func main() {
    timer.AfterFunc(duration(), noonTask)
    wg.Add(1)
    // do normal task here
    wg.Wait()
}

func duration() time.Duration {
    t := time.Now()
    n := time.Date(t.Year(), t.Month(), t.Day(), 12, 0, 0, 0, t.Location())
    if t.After(n) {
        n = n.Add(24 * time.Hour)
    }
    d := n.Sub(t)
    return d
}

var wg sync.WaitGroup


 类似资料:
  • 问题内容: 我正在使用Node,并且需要使此功能每天在午夜运行,这可能吗? 问题答案: 我相信节点计划包将满足您的需求。通常,您希望所谓的cron安排和运行服务器任务。 使用 节点计划 :

  • 问题内容: 我想将golang应用程序中的perl用于正则表达式。如何运行perl文件并在两个进程之间进行通信?我已经尝试过该程序包,但是它给了我一个指针作为最终值。 问题答案: 我不认为仅使用正则表达式不是一个好主意。但是,如果您绝对需要。通过命令运行它,然后从和读取它。为了提供输入,您可以使用。 您获得指针的原因可能是因为您没有运行命令。那是你如何努力 ,也需要运行

  • 问题内容: 我想每天下午2点执行工作。我可以使用哪种方法安排工作? 运行2小时后,它将停止工作并重新计划第二天的下午2点。 问题答案:

  • 问题内容: 来自Python,我不习惯看到超过80列的代码行。所以当我遇到这个: 我试图打破它 但是我明白了 我还尝试过按回车键并在末尾加分号来打破界限: 但是我再次得到: 所以我想知道用什么语言来做到这一点? 问题答案: 首先介绍一些背景。Go的正式语法在许多产品中都使用分号作为终止符,但是Go程序可能会省略大多数(它们应该有一个更清晰易读的源;也可以删除不必要的分号)。 该规范列出了确切的规则

  • 这里的新手。 目前正在学习grpc的工作原理,并正在通过此链接中的教程 https://grpc.io/docs/quickstart/go.html#update-and-run-the-application 当我使用helloworld运行这个示例时。PB去提供的文件,就行了。但当我删除了那个文件并运行了要再次生成该文件,我发现我无法再运行迎宾服务器。 我得到的错误是 google.gola

  • 问题内容: 由于某种原因,没有关于在Java代码中运行liquibase的文档。我想为单元测试生成表。 我将如何直接在Java中运行它? 例如 问题答案: 它应该类似于(取自liquibase.integration.spring.SpringLiquibase源代码): ResourceAccessor有多种实现方式,具体取决于应如何找到更改日志文件。