首页 > 其他分享 >go使用定时器

go使用定时器

时间:2023-11-13 19:31:57浏览次数:34  
标签:定时器 信号 syscall func 使用 go os sigCh

go使用定时器

package main

import (
	"fmt"
	"os"
	"os/signal"
	"syscall"
	"time"
)

func main() {
	initTask()
}
func stop(ticker *time.Ticker) {
	// 创建一个通道来接收信号
	sigCh := make(chan os.Signal, 1)
	// 监听指定的信号
	signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)

	// 启动一个 goroutine 来处理接收到的信号
	go func() {
		// 等待信号
		sig := <-sigCh
		fmt.Println("接收到信号:%v\n", sig)
		defer ticker.Stop()
		fmt.Println("关闭程序")

		// 退出程序
		os.Exit(0)
	}()
}
func initTask() {
	// 创建一个定时器,每隔一秒执行一次
	ticker := time.NewTicker(1 * time.Second)
	//系统关闭时关闭定时器
	stop(ticker)
	// 使用匿名函数作为定时任务的执行逻辑
	go func() {
		for {
			select {
			case <-ticker.C:
				// 在这里编写你的定时任务逻辑
				fmt.Println("定时任务执行时间:", time.Now())
			}
		}
	}()

	// 主goroutine继续执行其他逻辑
	select {}
}

标签:定时器,信号,syscall,func,使用,go,os,sigCh
From: https://blog.51cto.com/u_13626606/8352228

相关文章

  • Vue 在内部对异步队列尝试使用原生的 Promise.then、MutationObserver 和 setImmedia
    下列关于Vue的描述错误的是()A当给某个组件修改某个值时,该组件不会立即重新渲染BVue内部使用原生Promise.then、MutationObserver和setImmediate实现异步队列,不会采用setTimeout(fn,0)C$nextTick()返回一个Promise对象D$nextTick()可以配合async/await使用正确答案:B官......
  • 使用.NET Core创建Windows服务
    使用.NETCore创建Windows服务1.创建一个新的WorkerService项目打开命令行工具(例如:PowerShell、CMD、或者终端),然后输入以下命令创建一个新的WorkerService项目:dotnet new worker -n MyWorkerService这个命令将会创建一个名为"MyWorkerService"的新项目。2.添加必要的NuGe......
  • phpmailer的使用方法
    具体代码如下composer requirephpmailer/phpmailer<?phpheader('content-type:text/html;charset=utf-8;');set_time_limit(3600);require"vendor/autoload.php";$send_res=sendEmail('主题','内容','[email protected]'......
  • Apipost IDEA插件如何使用
    Apipost-Helper是由Apipost推出的IDEA插件,写完接口可以进行快速调试,且支持搜索接口、根据method跳转接口,还支持生成标准的API文档,注意:这些操作都可以在代码编辑器内独立完成,非常好用!这里给大家介绍一下Apipost-Helper的安装和使用安装在IDEA编辑器插件中心输入Apipost搜索安装:Api......
  • Object.defineProperty(obj,key,val)不可以监听数组变化,需要做特殊处理,所以Vue3.0使用
    关于Vue双向数据绑定说法错误的是()AVue实现双向数据绑定是采用数据劫持和发布者-订阅者模式BObject.defineProperty(obj,key,val)可以监听数组变化,不需要做特殊处理CVue2.0数据劫持是利用ES5的Object.defineProperty(obj,key,val)方法来劫持每个属性的getter和setterD......
  • Apipost IDEA插件如何使用
    Apipost-Helper是由Apipost推出的IDEA插件,写完接口可以进行快速调试,且支持搜索接口、根据method跳转接口,还支持生成标准的API文档,注意:这些操作都可以在代码编辑器内独立完成,非常好用!这里给大家介绍一下Apipost-Helper的安装和使用安装在IDEA编辑器插件中心输入Apipost搜索安装:......
  • tortoise ORM 使用经验
    usero=toobj({'name':'sam','id':123})print(json.dumps(usero))obj='Company'Class_name=globals()[obj]companyo=awaitClass_name.filter(id=2).first()creatoro=awaitcompanyo.creator.get()creator=awaitcompa......
  • DevOps系列---【jenkinsfile使用sshpass发送到另一台服务器】
    1.首先在宿主机安装sshpass2.把物理机的sshpass复制到容器中whichsshpasscp$(whichsshpass)/usr/local/app/dockercpsshpass容器id:/usr/local/bin/sshpass3.在jenkinsfile中添加#在stages中添加stagestage('部署TEST服务'){steps{sh"sshpass-proot......
  • selenium和playwright的区别和使用方法
    Selenium和Playwright都是自动化测试工具,可以用于模拟用户操作、执行测试脚本、验证网站功能和性能等。它们的主要区别在于实现方式和功能特性。1.实现方法Selenium是基于浏览器驱动的自动化测试工具,支持多种编程语言和多种浏览器。Selenium通过启动浏览器驱动程序(如Chrome......
  • Go语言从入门到精通
    【一】Go语言介绍及引入Go语言的介绍Go语言的诞生Go语言版本的发展Go语言的特性Go语言的应用领域【二】Go开发环境下载与安装Go编译器的下载Windows下Go的安装配置Windows配置GOPATH环境Mac下Go的安装配置Mac配置GOPATH环境变量入门案例开发工具【三】Go语言基......