Golang 入门系列-八怎样实现定时任务,极简版.

感谢平台分享-http://bjbsair.com/2020-04-10/tech-info/53303.html

前面讲介绍了Go 语言的基础入门及Golang的语法结构。同时也介绍Golang的接口及协程等内容。感兴趣的朋友可以先看看之前的文章。接下来说一说Golang 如何实现定时任务。

golang 实现定时服务很简单,只需要简单几步代码便可以完成,不需要配置繁琐的服务器,直接在代码中实现。

1、使用的包

github.com/robfig/cron

2、示例

1、创建最简单的最简单cron任务

package main  

import (
   "github.com/robfig/cron"
   "fmt"
)  

func main() {
   i := 0
   c := cron.New()
   spec := "*/5 * * * * ?"
   c.AddFunc(spec, func() {
      i++
      fmt.Println("cron running:", i)
   })
   c.Start()  

   select{}
}

启动后输出如下:

D:\Go_Path\go\src\cronjob>go run multijob.go
cron running: 1
testJob1...
testJob2...
testJob1...
cron running: 2
testJob2...
testJob1...
testJob2...
cron running: 3
cron running: 4
testJob1...
testJob2...

2、多个定时cron任务

package main  

import (
    "github.com/robfig/cron"
    "fmt"
    )  

type TestJob struct {
}  

func (this TestJob)Run() {
    fmt.Println("testJob1...")
}  

type Test2Job struct {
}  

func (this Test2Job)Run() {
    fmt.Println("testJob2...")
}  

//启动多个任务
func main() {
    i := 0
    c := cron.New()  

    //AddFunc
    spec := "*/5 * * * * ?"
    c.AddFunc(spec, func() {
        i++
        fmt.Println("cron running:", i)
    })  

    //AddJob方法
    c.AddJob(spec, TestJob{})
    c.AddJob(spec, Test2Job{})  

    //启动计划任务
    c.Start()  

    //关闭着计划任务, 但是不能关闭已经在执行中的任务.
    defer c.Stop()  

    select{}
}

启动后输出如下:

D:\Go_Path\go\src\cronjob>go run multijob.go
cron running: 1
testJob1...
testJob2...
testJob1...
cron running: 2
testJob2...
testJob1...
testJob2...
cron running: 3
cron running: 4
testJob1...
testJob2...

3、cron 表达式

4、最后

以上,就将Golang中如何创建定时任务做了简单介绍,实际使用中,大家可以可结合配置需要定时执行的任务。

原文地址:https://blog.51cto.com/14744108/2486367

时间: 2024-10-08 15:40:47

Golang 入门系列-八怎样实现定时任务,极简版.的相关文章

C语言快速入门系列(八)

C语言快速入门系列(八) C语言位运算与文件 本章引言: 在不知不觉中我们的C快速入门系列已经慢慢地接近尾声了,而在这一节中,我们会对 C语言中的位运算和文件进行解析,相信这两章对于一些人来说是陌生的,因为很多 老师都会跳过这两个大知识点,其实这两个也是灰常重要的!比如一个问题,叫你算 变量a乘以2,怎么写效率高?直接a *2,很多人都这样写,但是如果你会位运算的话,你会a<<1; 位运算的效率可是比a*2高的哦!另一个问题,不用变量左中间值,直接交换两个变量的值? 你怎么做?也是用到位运算!

js消除小游戏(极简版)`

js小游戏极简版 (1) 基础布局 <div class = "box"> <p></p> <div class="div"></div> </div>     (2)简单的基础样式 * { margin: 0; padding: 0; } div.box { width: 1000px; height: 700px; border: 1px solid #008B8B; box-sizing:

Golang 入门系列(十五)如何理解go的并发?

前面已经讲过很多Golang系列知识,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/category/1275863.html, 接下来要说的是golang的并发,其实之前简单介绍过协程(goroutine)和管道(channel) 等基础内容,只是比较简单,只讲了基本的语法.今天就详细说说golang的并发编程. 一.并发和并行 Go是并发语言,而不是并行语言.所以我们在讨论,我们首先必须了解什么是并发,以及它与并行性有什么不同. 什么

Golang 入门系列(七)Redis的使用

安装 1. Redis 的安装很简单,我这里测试直接用的是windows 的版本.如何安装就不细说了.想了解的可以看之前的文章:https://www.cnblogs.com/zhangweizhong/category/771056.html 2. golang 客户端,用的是 go-redis, 1.   go get github.com/go-redis 2.  接着在代码中导入此包即可: import "github.com/go-redis/redis" 基本操作 创建Re

Golang 入门系列(十) mysql数据库的使用

之前,已经讲过一些Golang的基础的东西,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/category/1275863.html, 今天简单介绍下Golang是如何使用mysql数据库的.由于Go本身不提供具体数据库驱动,只提供驱动接口和管理.各个数据库驱动需要第三方实现,并且注册到Go中的驱动管理中.github上面的mysql驱动有好几个,我在这里选择的https://github.com/go-sql-driver/mysql.

Spring Boot2 系列教程(二十七)Nginx 极简扫盲入门

上篇文章和大家聊了 Spring Session 实现 Session 共享的问题,有的小伙伴看了后表示对 Nginx 还是很懵,因此有了这篇文章,算是一个 Nginx 扫盲入门吧! 基本介绍 Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务. Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日. Nginx 特点是占有内存少,

spring cloud 入门系列八:使用spring cloud sleuth整合zipkin进行服务链路追踪

好久没有写博客了,主要是最近有些忙,今天忙里偷闲来一篇. =======我是华丽的分割线========== 微服务架构是一种分布式架构,微服务系统按照业务划分服务单元,一个微服务往往会有很多个服务单元,一个请求往往会有很多个单元参与,一旦请求出现异常,想要去定位问题点真心不容易,因此需要有个东西去跟踪请求链路,记录一个请求都调用了哪些服务单元,调用顺序是怎么样的以及在各个服务单元处理的时间长短.常见的服务链路追踪组件有google的dapper.twitter的zipkin.阿里的鹰眼等,它们

UIPath入门系列八之Selectors

今日更新的主题是UIPath的Selectors,选择器 一.Selectors的简介 大多数RPA产品都是依靠UI元素的屏幕位置来完成的,但屏幕位置往往会出现定位失败,UIPath的Selectors选择器解决了这个问题. 二.Selectors的三种识别方法 1) 默认为default:通常适用于所有类型的用户界面 2) Active Accessibility:Microsoft提供的一个解决方案,可以访问应用程序.当默认值不起作用时,建议您将此选项与旧版软件一起使用. 3) UI Aut

一些项目——当年第几天(极简版)

问题及代码 #include <iostream> using namespace std; int main() { int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},year,month,day,i,days=0; char e; cin>>year>>e>>month>>e>>day; for(i=0;i<month;i++) days+=m[i]; if(((year%4