[Go实战]手写一个简单的EventDispatcher事件注册机制

81 阅读1分钟

手写一个简单的EventDispatcher [Golang] 事件注册机制

背景

项目中用到了eventDispatcher,但是golang没有,所以1V1借助laya的思想写了一个golang的版本

核心代码

RegisterEvent/RemoveEvent/DispatchEvent
// DispatchEvent
func (p *_EventManager) DispatchEvent(tp string, args interface{}) {
	if f, ok := p.eventMap[tp]; ok {
		err := f.Exec(args)
		if err != nil {
			fmt.Println(fmt.Sprintf("%+v", err.Error()))
		}
	}
}

// RegisterEvent
func (p *_EventManager) RegisterEvent(tp string, f TFunction) {
	e, ok := p.eventMap[tp]
	if ok {
		e.Add(&f)
	} else {
		tEvent := &_Event{
			functions: []*TFunction{&f},
		}
		p.eventMap[tp] = tEvent
	}
}

// RemoveEvent
func (p *_EventManager) RemoveEvent(tp string, f TFunction) {
	if e, ok := p.eventMap[tp]; ok {
		e.Remove(&f)
		return
	}
}

地址

github地址

运行结果

在这里插入图片描述在这里插入图片描述