前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go:在调用函数时指定最小运行间隔

go:在调用函数时指定最小运行间隔

作者头像
超级大猪
发布2024-01-10 09:50:50
1540
发布2024-01-10 09:50:50
举报
文章被收录于专栏:大猪的笔记

有时候在打印日志的时候,在频繁的操作中,会被日志刷屏,但又想定期打印查看状态。这个时候可以利用time.Timer实现一个可指定最小执行间隔的函数,具体看代码吧。

代码语言:javascript
复制
// Package tools ...
package tools

import (
    "sync/atomic"
    "time"
)

/*
    NewTickDo 是一个很有意思的小工具,每隔n秒**尝试**执行一个操作,用在打日志非常方便,避免刷屏

使用方法:

    tick = NewTickDo(time.Second)
    for{
        tick.Do(func() {
            log.Infof("每秒执行一次,未到时间什么都不会发生,直接忽略")
        })
    }
*/
func NewTickDo(du time.Duration) *TickDo {
    t := new(TickDo)
    // 第一次让它过期
    ttimer := time.NewTimer(time.Nanosecond)
    time.Sleep(time.Nanosecond)
    t.lastCall.Store(ttimer)
    t.du = du
    return t
}

// TickDo ...
type TickDo struct {
    lastCall atomic.Value
    du       time.Duration
}

// Do 根据预定的时间,Do在调用时,会判定是否过了du时间,如果已过,则执行f(),否则忽略
//
//	tick.Do(func(){
//	  fmt.Printf("hello\n")
//	})
//
// 每隔一定的时间才会出现hello打印
func (t *TickDo) Do(f func()) {
    select {
    case <-t.lastCall.Load().(*time.Timer).C:
        f()
        t.lastCall.Store(time.NewTimer(t.du))
    default:
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档