go语言连续监控事件并回调处理

前言

go语言中使用回调函数处理事件:事件监测部分(如无限循环中的事件检测逻辑)可以独立于具体的业务处理逻辑。这使得代码的各个部分更加清晰,易于理解和维护。如果需要更改事件处理的方式,只需要修改注册的回调函数,而不需要修改事件监测的核心代码。例如,如果要改变对特定事件的响应行为,只需重新定义一个不同的回调函数并注册即可,不会影响事件监测的机制。

一、回调函数的定义

复制代码
// 定义事件处理函数类型
type EventHandler func(eventData interface{})

// 模拟事件源
type EventSource struct {
    eventHandlers []EventHandler
}

二、 添加结构体的方法

复制代码
// 注册事件处理函数
func (es *EventSource) RegisterHandler(handler EventHandler) {
    es.eventHandlers = append(es.eventHandlers, handler)
}

// 触发事件
func (es *EventSource) TriggerEvent(eventData interface{}) {
    for _, handler := range es.eventHandlers {
        handler(eventData)
    }
}

三、回调函数的实现

复制代码
// 单独定义的回调函数
func myEventHandler(data interface{}) {
    fmt.Println("Event handled by named function:", data)
}

四、事件检测

复制代码
func monitorEvents(eventSource *EventSource) {
    for {
        // 模拟检测事件,这里可以是实际的事件检测逻辑
        // 假设每2秒检测到一个事件
        time.Sleep(2 * time.Second)
        eventData := "Detected event!"
        eventSource.TriggerEvent(eventData)
    }
}

五、主函数实现

复制代码
func main() {
    eventSource := &EventSource{}

    // 注册单独定义的回调函数
    eventSource.RegisterHandler(myEventHandler)

    go monitorEvents(eventSource)

    // 让主程序持续运行,以保持监控事件的 goroutine 运行
    select {}
}
相关推荐
IT_陈寒2 小时前
JavaScript性能优化:我用这7个V8引擎冷门技巧将页面加载速度提升了40%
前端·人工智能·后端
微爱帮监所写信寄信2 小时前
微爱帮监狱寄信写信小程序与焦作邮政系统对接技术方案
开发语言·网络协议·小程序·https·php·监狱寄信
lsx2024062 小时前
适配器模式
开发语言
码农水水2 小时前
宇树科技Java面试被问:Atomic原子类的实现原理(CAS机制)
java·开发语言
EverestVIP2 小时前
Qt 信号槽断开连接的几种方式
开发语言·qt
liuc03172 小时前
JAVA调用deepSeek demo
java·开发语言
自由生长20242 小时前
nghttp2 与现代 HTTP 生态:从幕后英雄到 HTTP/2 事实标准
后端
9稳3 小时前
基于PLC的液体自动混合加热控制系统设计
开发语言·网络·数据库·labview·plc
爱吃山竹的大肚肚3 小时前
Spring Boot 与 Apache POI 实现复杂嵌套结构 Excel 导出
java·spring boot·后端·spring·spring cloud·excel
Aevget3 小时前
Python开发利器PyCharm v2025.3全新发布——支持主动数据探索
开发语言·ide·python·pycharm