code: func isHandlerMethod(method reflect.Method) bool {
  	mt := method.Type
  	// Method must be exported.
  	if method.PkgPath != "" {
  		return false
  	}
  
  	// Method needs two or three ins: receiver, context.Context and optional []byte or pointer.
  	if mt.NumIn() != 2 && mt.NumIn() != 3 {
  		return false
  	}
  
  	if t1 := mt.In(1); !t1.Implements(typeOfContext) {
  		return false
  	}
  
  	if mt.NumIn() == 3 && mt.In(2).Kind() != reflect.Ptr && mt.In(2) != typeOfBytes {
  		return false
  	}
  
  	// Method needs either no out or two outs: interface{}(or []byte), error
  	if mt.NumOut() != 0 && mt.NumOut() != 2 {
  		return false
  	}
  
  	if mt.NumOut() == 2 && (mt.Out(1) != typeOfError || mt.Out(0) != typeOfBytes && mt.Out(0).Kind() != reflect.Ptr) {
  		return false
  	}
  
  	return true
  }
docs: // isHandlerMethod decide a method is suitable handler method