package async import "reflect" func Async(fn interface{}, args ...interface{}) func() { fnValue := reflect.ValueOf(fn) // Prepare the arguments params := make([]reflect.Value, len(args)) for i, arg := range args { params[i] = reflect.ValueOf(arg) } // Return a function that, when called, will invoke the original function return func() { fnValue.Call(params) } }