Go语言事件系统源码示例
由于事件系统是一个比较广泛的概念,涉及的领域很多,因此无法给出一个通用的 Go 语言实现。不过,下面是一个简单的示例,展示了如何使用 Go 语言创建一个事件系统:
type Event struct {
Name string
Data interface{}
}
type EventListener interface {
OnEvent(e Event)
}
type EventEmitter struct {
listeners map[string][]EventListener
}
func (emitter *EventEmitter) AddEventListener(name string, listener EventListener) {
if _, ok := emitter.listeners[name]; !ok {
emitter.listeners[name] = make([]EventListener, 0)
}
emitter.listeners[name] = append(emitter.listeners[name], listener)
}
func (emitter *EventEmitter) RemoveEventListener(name string, listener EventListener) {
if _, ok := emitter.listeners[name]; ok {
for i := range emitter.listeners[name] {
if emitter.listeners[name][i] == listener {
emitter.listeners[name] = append(emitter.listeners[name][:i], emitter.listeners[name][i+1:]...)
break
}
}
}
}
func (emitter *EventEmitter) EmitEvent(e Event) {
if listeners, ok := emitter.listeners[e.Name]; ok {
for _, listener := range listeners {
listener.OnEvent(e)
}
}
}
上述代码实现了一个简单的事件系统,包含三个组成部分:
- 'Event':事件对象,包含事件名称和事件数据。
- 'EventListener':事件监听器,定义了一个'OnEvent'方法,用于响应事件。
- 'EventEmitter':事件发射器,负责管理事件监听器,并在事件触发时调用监听器的'OnEvent'方法。
我们可以通过调用'AddEventListener'方法来添加事件监听器,通过调用'RemoveEventListener'方法来移除事件监听器,通过调用'EmitEvent'方法来触发事件。当事件触发时,事件发射器会根据事件名称找到对应的监听器,并调用其'OnEvent'方法。
原文地址: https://www.cveoy.top/t/topic/m9w7 著作权归作者所有。请勿转载和采集!