time.Timer


前言

今天观摩前辈的代码,看到time.Timer的使用,发现对于定时任务可以这样做达到js的setInterval()效果


一、代码

package main

import (
	"fmt"
	"gorm.io/driver/postgres"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
	"time"
)

type Cchecker struct {
	timer   *time.Timer
	endChan chan bool
}

func main() {
	go checkFunc()
	for {

	}
}
func checkFunc() {
	var d Cchecker
	d.timer = time.NewTimer(time.Second * time.Duration(2))
	d.endChan = make(chan bool, 1)
	for {
		select {
		case <-d.timer.C:
			d.timer.Reset(time.Second * time.Duration(2))
			if i := check(); i == 1 {
				fmt.Println("数据库已更新")
				d.endChan <- true
			} else {
				fmt.Println("数据库未更新")
			}
		case <-d.endChan:
			return
		}
	}
}

func check() int {
	dataSourceName := fmt.Sprintf("user=%s password=%s dbname=%s host=%s port=%s timezone=%s sslmode=disable",
		"postgres", "xxxx", "xxxx", "xxxxxxxxx", "xxxxx", "Asia/shanghai")

	db, err := gorm.Open(postgres.Open(dataSourceName), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{SingularTable: true},
		PrepareStmt:    true,
	})
	if err != nil {
		fmt.Println("err")
	}
	var i int
	err = db.Raw("SELECT flag FROM idp where id = 1").Scan(&i).Error
	return i
}

二、DB

在这里插入图片描述

三、效果

手动更改数据库flag为非1时,检测出数据库更新信息
在这里插入图片描述
如图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值