code: func (dis *dispatcher) UnRegisterListener(listenerObj core.EventListener, keys ...string) error {
  	if listenerObj == nil {
  		return errors.New("nil listener")
  	}
  
  	for _, key := range keys {
  		listenerList, ok := dis.listeners[key]
  		if !ok {
  			continue
  		}
  
  		newListenerList := make([]core.EventListener, 0)
  		// remove listener
  		for _, listener := range listenerList {
  			if listener == listenerObj {
  				continue
  			}
  			newListenerList = append(newListenerList, listener)
  		}
  
  		// assign latest listener list
  		dis.listeners[key] = newListenerList
  	}
  	return nil
  }
docs: // UnRegisterListener un-register listener for a particular configuration