[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()
    }
}
相关推荐
古城小栈3 小时前
Go 语言 WebAssembly 原生支持:前后端一体化开发详解
开发语言·golang·wasm
古城小栈4 小时前
Go语言调试:Delve+VS Code实战指南
golang
teamlet6 小时前
多域名TLS 证书的自动签名和续期
golang·https·letsencrypt·acmev2
古城小栈6 小时前
Go+Rust混合编程:高性能系统开发的最优解之一
golang·rust
古城小栈6 小时前
Go 语言容器感知,自动适配 K8s 资源限制
golang·kubernetes
海上彼尚10 小时前
Go之路 - 7.go的结构体
开发语言·后端·golang
源代码•宸15 小时前
分布式缓存-GO(分布式算法之一致性哈希、缓存对外服务化)
开发语言·经验分享·分布式·后端·算法·缓存·golang
半桶水专家1 天前
GORM 结构体字段标签(Struct Tags)详解
golang·go·gorm
GokuCode1 天前
【GO高级编程】05.类的扩展与复用
golang·embedding·xcode
Tony Bai1 天前
Jepsen 报告震动 Go 社区:NATS JetStream 会丢失已确认写入
开发语言·后端·golang