12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package mhayaReflect
- import (
- "reflect"
- cerr "github.com/mhaya/error"
- )
- var (
- nilFuncInfo = FuncInfo{}
- )
- type FuncInfo struct {
- Type reflect.Type
- Value reflect.Value
- InArgs []reflect.Type
- InArgsLen int
- OutArgs []reflect.Type
- OutArgsLen int
- }
- func GetFuncInfo(fn interface{}) (FuncInfo, error) {
- if fn == nil {
- return nilFuncInfo, cerr.FuncIsNil
- }
- typ := reflect.TypeOf(fn)
- if typ.Kind() != reflect.Func {
- return nilFuncInfo, cerr.FuncTypeError
- }
- var inArgs []reflect.Type
- for i := 0; i < typ.NumIn(); i++ {
- t := typ.In(i)
- inArgs = append(inArgs, t)
- }
- var outArgs []reflect.Type
- for i := 0; i < typ.NumOut(); i++ {
- t := typ.Out(i)
- outArgs = append(outArgs, t)
- }
- funcInfo := FuncInfo{
- Type: typ,
- Value: reflect.ValueOf(fn),
- InArgs: inArgs,
- InArgsLen: typ.NumIn(),
- OutArgs: outArgs,
- OutArgsLen: typ.NumOut(),
- }
- return funcInfo, nil
- }
|