package eventbus import ( "sync" ) type Listener interface { OnEvent(eventtype string, o interface{}) } type Eventbus struct { mutex *sync.RWMutex listeners []Listener } func New() *Eventbus { eb := Eventbus{} eb.mutex = &sync.RWMutex{} eb.listeners = make([]Listener, 0) return &eb } func (this *Eventbus) Emit(eventtype string, o interface{}) { this.mutex.RLock() defer this.mutex.RUnlock() for _, l := range this.listeners { l.OnEvent(eventtype, o) } } func (this *Eventbus) AddListener(l Listener) { this.mutex.Lock() defer this.mutex.Unlock() this.listeners = append(this.listeners, l) }