[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()
    }
}
相关推荐
2501_931803753 小时前
Go:一门为解决C语言痛点而生的现代语言
c语言·开发语言·golang
geovindu3 小时前
go: Interpreter Pattern
开发语言·设计模式·golang·解释器模式
平凡但不平庸的码农7 小时前
Go Channel详解
开发语言·后端·golang
子安柠8 小时前
深入理解 Go 语言文件操作:从基础到最佳实践
开发语言·后端·golang
Achou.Wang8 小时前
go语言中使用等待组(waitgroups)和内存屏障(barriers)进行同步
开发语言·后端·golang
金玉满堂@bj10 小时前
Go 语言能做什么?
开发语言·后端·golang
geovindu11 小时前
go:Condition Variable Pattern
开发语言·后端·设计模式·golang·条件变量模式
金玉满堂@bj11 小时前
Gin 框架零基础全套入门教程(Go 企业级 Web 开发)
前端·golang·gin
jieyucx20 小时前
Go语言深度解剖:Map扩容机制全解析(增量扩容+等量扩容+渐进式迁移)
开发语言·后端·golang·map·扩容策略
王码码203521 小时前
Go语言的内存管理:原理与实战
后端·golang·go·接口