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 {}
}
相关推荐
愚润求学17 分钟前
【Linux】进程间通信(一):认识管道
linux·运维·服务器·开发语言·c++·笔记
diving deep20 分钟前
XML简要介绍
xml·java·后端
{⌐■_■}30 分钟前
【gRPC】HTTP/2协议,HTTP/1.x中线头阻塞问题由来,及HTTP/2中的解决方案,RPC、Protobuf、HTTP/2 的关系及核心知识点汇总
网络·网络协议·计算机网络·http·rpc·golang
珊瑚里的鱼33 分钟前
【滑动窗口】LeetCode 1658题解 | 将 x 减到 0 的最小操作数
开发语言·c++·笔记·算法·leetcode·stl
晚秋大魔王1 小时前
OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——wget
java·linux·运维·开发语言·华为·harmonyos
heath ceTide1 小时前
轻量、优雅、高扩展的事件驱动框架——Hibiscus-Signal
java·开发语言
_extraordinary_1 小时前
Java 常用的Arrays函数
java·开发语言
_extraordinary_1 小时前
Java 类和对象
java·开发语言
Aliano2171 小时前
TestNGException ClassCastException SAXParserFactoryImpl是Java自带的Xerces解析器——解决办法
java·开发语言·python
漫谈网络1 小时前
回调函数应用示例
开发语言·python·回调函数