[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()
    }
}
相关推荐
golang学习记2 小时前
Go 实时批处理:让数据库少挨点打 [特殊字符]
开发语言·数据库·golang
hutengyi4 小时前
go测试问题记录
开发语言·后端·golang
KevinCyao4 小时前
Go短信营销接口示例代码:Golang高并发调用营销短信接口的实现方案与代码分享
android·前端·网络·golang·前端框架
精神小伙就是猛5 小时前
使用go-zero快速搭建一个微服务(一)
开发语言·后端·微服务·golang
不会聊天真君6475 小时前
基础语法·下(golang笔记第三期)
开发语言·笔记·golang
大阿明6 小时前
Go基础之环境搭建
开发语言·后端·golang
人间打气筒(Ada)7 小时前
go:如何保障分布式系统的高可用性?(下篇)
golang·高可用·超时设计·限流设计·接口缓存·重试设计·无状态设计
Bruce20489988 小时前
Go 云原生实战:K8s Operator 开发与服务网格(Istio)落地
云原生·golang·kubernetes
不会写DN9 小时前
Go 生态最快 JSON 库 - jsoniter
开发语言·golang·json
2401_8955213410 小时前
Golang 构建学习
开发语言·学习·golang