23 lines
563 B
Go
23 lines
563 B
Go
/*
|
|
Copyright
|
|
*/
|
|
package main
|
|
|
|
import (
|
|
"errors"
|
|
"reflect"
|
|
)
|
|
|
|
// Invoke calls the specified method with the specified arguments on the specified interface.
|
|
// It uses the go(lang) reflect package.
|
|
func invoke(any interface{}, name string, args ...interface{}) ([]reflect.Value, error) {
|
|
inputs := make([]reflect.Value, len(args))
|
|
for i := range args {
|
|
inputs[i] = reflect.ValueOf(args[i])
|
|
}
|
|
method := reflect.ValueOf(any).MethodByName(name)
|
|
if method.IsValid() {
|
|
return method.Call(inputs), nil
|
|
}
|
|
return nil, errors.New("Method not found: " + name)
|
|
}
|