I have implemented a kind of thing that does event triggering in Golang. This is open-sourced here. Review and suggestions appreciated.First thing I am trying to implement is adding event listeners to a trigger:func (t *trigger) On(event string, task interface{}) error {    if _, ok := t.functionMap[event]; ok {        return errors.New(event already defined)    }    if reflect.ValueOf(task).Type().Kind() != reflect.Func {        return errors.New(task is not a function)    }    t.mu.Lock()    defer t.mu.Unlock()    t.functionMap[event] = task    return nil }So that when Fire is called all the handler chain will be executed:func (t *trigger) Fire(event string, params ...interface{}) ([]reflect.Value, error) {    f, in, err := t.read(event, params...)    if err != nil {        return nil, err    }    result := f.Call(in)    return result, nil }But the thing is that don't want to maintain a whole param array for all the handlers' method parameters. How can it be done otherwise?
Event-triggering - Ready, On, Fire
event handling;go