// 空了再回来写思路,还有补充
基于 go 语言编写的 eventbus
import 'fmt'
type EventListenerCallback func(data string)
type EventListener struct{
Callback EventListenerCallback
IsOnce bool
}
type Emiter struct{
eventMap map[string][]EventListener
}
func newEmiter() Emiter {
return Emiter{
eventMap: make(map[string][]EventListener),
}
}
func (this *Emiter) on(event string, fn EventListenerCallback) {
this.eventMap[event] = append(this.eventMap[event], EventListener{
Callback: fn,
IsOnce: false,
})
}
func (this *Emiter) once(event string, fn EventListenerCallback) {
this.eventMap[event] = append(this.eventMap[event], EventListener{
Callback: fn,
IsOnce: true,
})
}
func (this *Emiter) emit(event string, msg string) {
newEventList := []EventListener{}
for _, eventListener := range this.eventMap[event]{
eventListener.Callback(msg)
if !eventListener.IsOnce{
newEventList = append(newEventList, eventListener)
}
}
this.eventMap[event] = newEventList
}
func main() {
emit := newEmiter()
emit.on("msg", func(data string){
fmt.Println(data)
})
emit.once("msg", func(data string){
fmt.Println("once", data)
})
emit.emit("msg", "hello world")
emit.emit("msg", "hello world33333333")
}