util.go 782 B

12345678910111213141516171819202122232425262728293031
  1. package util
  2. import (
  3. "fmt"
  4. "reflect"
  5. "unicode"
  6. "unicode/utf8"
  7. )
  8. func CallHandlerFunc(foo reflect.Method, args []reflect.Value) (retValue any, retErr error) {
  9. defer func() {
  10. if err := recover(); err != nil {
  11. fmt.Println(fmt.Sprintf("CallHandlerFunc: %v", err))
  12. retValue = nil
  13. retErr = fmt.Errorf("CallHandlerFunc: call method pkg:%s method:%s err:%v", foo.PkgPath, foo.Name, err)
  14. }
  15. }()
  16. if ret := foo.Func.Call(args); len(ret) > 0 {
  17. var err error = nil
  18. if r1 := ret[1].Interface(); r1 != nil {
  19. err = r1.(error)
  20. }
  21. return ret[0].Interface(), err
  22. }
  23. return nil, fmt.Errorf("CallHandlerFunc: call method pkg:%s method:%s", foo.PkgPath, foo.Name)
  24. }
  25. func IsExported(name string) bool {
  26. w, _ := utf8.DecodeRuneInString(name)
  27. return unicode.IsUpper(w)
  28. }