method.go 720 B

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