mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-04 21:02:27 +08:00
24 lines
492 B
Go
24 lines
492 B
Go
package function
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
)
|
|
|
|
func invokeFunc(fn interface{}, args ...interface{}) []reflect.Value {
|
|
fv := functionValue(fn)
|
|
params := make([]reflect.Value, len(args))
|
|
for i, item := range args {
|
|
params[i] = reflect.ValueOf(item)
|
|
}
|
|
return fv.Call(params)
|
|
}
|
|
|
|
func functionValue(function interface{}) reflect.Value {
|
|
v := reflect.ValueOf(function)
|
|
if v.Kind() != reflect.Func {
|
|
panic(fmt.Sprintf("Invalid function type, value of type %T", function))
|
|
}
|
|
return v
|
|
}
|