code: func (d *dispatcher) delListener(targetID, eventName string, id int) {
  	d.m.Lock()
  	defer d.m.Unlock()
  	if _, ok := d.l[targetID]; !ok {
  		return
  	}
  	if _, ok := d.l[targetID][eventName]; !ok {
  		return
  	}
  	delete(d.l[targetID][eventName], id)
  }
docs: // delListener delete a specific listener