是否可以每天中午执行代码?该程序将在其余的运行时间中处理用户输入,但需要在中午运行一个函数以输出一些文本。最有效的方法是什么?
因此,您需要间隔计时器每天每天中午运行一项功能,您可以使用:
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点。 问题答案:
这里的新手。 目前正在学习grpc的工作原理,并正在通过此链接中的教程 https://grpc.io/docs/quickstart/go.html#update-and-run-the-application 当我使用helloworld运行这个示例时。PB去提供的文件,就行了。但当我删除了那个文件并运行了要再次生成该文件,我发现我无法再运行迎宾服务器。 我得到的错误是 google.gola
问题内容: 来自Python,我不习惯看到超过80列的代码行。所以当我遇到这个: 我试图打破它 但是我明白了 我还尝试过按回车键并在末尾加分号来打破界限: 但是我再次得到: 所以我想知道用什么语言来做到这一点? 问题答案: 首先介绍一些背景。Go的正式语法在许多产品中都使用分号作为终止符,但是Go程序可能会省略大多数(它们应该有一个更清晰易读的源;也可以删除不必要的分号)。 该规范列出了确切的规则
我得到 它不包含我在NetBeans中使用的jdk的路径。我没有找到一种方法告诉Java我想使用另一个jdk,所以我尝试了不使用: 运行特定主文件的示例 在java.lang.class.PrivateGetMethodRecursive(class.java:3048) 在java.lang.class.GetMethod0(class.java:3018) 在java.lang.class.G