[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()
    }
}
相关推荐
bybitq16 分钟前
Go 语言之旅方法(Methods)与接口(Interfaces)完全指南
开发语言·golang·xcode
saber_andlibert1 小时前
【C++转GO】初阶知识
开发语言·c++·golang
IT艺术家-rookie1 小时前
golang--解决 Go 并发场景下的数据竞争问题的方案
golang
小信啊啊3 小时前
Go语言映射(Map)
golang·go
小镇学者3 小时前
【golang】goland使用多版本go sdk的方法
开发语言·后端·golang
golang学习记4 小时前
[特殊字符] Go Gin 不停机重启指南:让服务在“洗澡搓背”中无缝升级
开发语言·golang·gin
teamlet5 小时前
naivemail - golang开发的最简smtp邮件系统
开发语言·后端·golang
moxiaoran57535 小时前
Go语言的数据类型转换
开发语言·后端·golang
海上彼尚5 小时前
Go之路 - 8.go的接口
开发语言·golang·xcode
乐茵lin5 小时前
golang context底层设计探究
开发语言·后端·golang·大学生·设计·context·底层源码