[go] 用ticker定时器来替代循环任务

使用 time.Ticker 来定期执行检查,间隔可以根据需求调整(例如每秒检查一次)。

go 复制代码
package main

import (
    "fmt"
    "sync"
    "time"
)

var (
    gDeviceList= make(map[string]int)
    mu            sync.Mutex
    maxCheckCount = 30
)

func main() {
    // 模拟数据插入
    gDeviceList["device1"] = 0
    gDeviceList["device2"] = 0

    // 使用 goroutine 在后台处理
    go monitorDevices()

    // 模拟其他工作
    time.Sleep(5 * time.Second)

    // 打印最后剩余的设备
    mu.Lock()
    for udid, count := range gDeviceList{
        fmt.Printf("UDID: %s, Count: %d\n", udid, count)
    }
    mu.Unlock()
}

func monitorDevices() {
    ticker := time.NewTicker(1 * time.Second)
    defer ticker.Stop()

    for range ticker.C {
        mu.Lock()
        for udid, count := range gDeviceList{
            gDeviceList[udid] = count + 1

            if count > maxCheckCount {
                delete(gDeviceList, udid)
            }
        }
        mu.Unlock()
    }
}
相关推荐
le serein —f4 小时前
用go实现-反转链表
leetcode·链表·golang
席万里6 小时前
关于Go的init函数执行顺序#黑魔法
开发语言·网络·golang
喵了几个咪12 小时前
Golang微服务框架kratos实现Socket.IO服务
开发语言·微服务·golang
海奥华216 小时前
分库分表技术详解:从入门到实践
数据库·后端·mysql·golang
智商低情商凑1 天前
Go学习之 - Goroutines和channels
开发语言·学习·golang
半桶水专家1 天前
Go 语言时间处理(time 包)详解
开发语言·后端·golang
编程点滴1 天前
Go 重试机制终极指南:基于 go-retry 打造可靠容错系统
开发语言·后端·golang
月屯1 天前
后端go完成文档分享链接功能
开发语言·后端·golang
喵了几个咪1 天前
Golang微服务框架Kratos实现Thrift服务
开发语言·微服务·golang
Zzz 小生2 天前
Github-Go语言AI智能体开发套件:构建下一代智能代理的利器
人工智能·golang·github