method.go 661 B

1234567891011121314151617181920212223242526272829303132
  1. package service
  2. import (
  3. "reflect"
  4. )
  5. var (
  6. typeOfError = reflect.TypeOf((*error)(nil)).Elem()
  7. typeOfBytes = reflect.TypeOf(([]byte)(nil))
  8. typeOfSession = reflect.TypeOf(NewSession(nil))
  9. )
  10. // 方法检测
  11. func isHandlerMethod(method reflect.Method) bool {
  12. mt := method.Type
  13. if method.PkgPath != "" {
  14. return false
  15. }
  16. if mt.NumIn() != 3 {
  17. return false
  18. }
  19. if mt.NumOut() != 2 {
  20. return false
  21. }
  22. if t1 := mt.In(1); t1.Kind() != reflect.Ptr || t1 != typeOfSession {
  23. return false
  24. }
  25. if (mt.In(2).Kind() != reflect.Ptr && mt.In(2) != typeOfBytes) || mt.Out(1) != typeOfError || mt.Out(0).Kind() != reflect.Ptr {
  26. return false
  27. }
  28. return true
  29. }