From f60a55d03a573a8d895c7b43ce15da41925fdad6 Mon Sep 17 00:00:00 2001 From: duanhf2012 <6549168@qq.com> Date: Wed, 4 Dec 2024 18:33:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BC=82=E6=AD=A5RPC?= =?UTF-8?q?=EF=BC=8C=E5=8E=BB=E6=8E=89error=E8=BF=94=E5=9B=9E=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rpc/rpchandler.go | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/rpc/rpchandler.go b/rpc/rpchandler.go index 2ba8d25..a4b4cda 100644 --- a/rpc/rpchandler.go +++ b/rpc/rpchandler.go @@ -164,13 +164,6 @@ func (handler *RpcHandler) suitableMethods(method reflect.Method) error { //取出输入参数类型 var rpcMethodInfo RpcMethodInfo typ := method.Type - if typ.NumOut() != 1 { - return fmt.Errorf("%s The number of returned arguments must be 1", method.Name) - } - - if typ.Out(0).String() != "error" { - return fmt.Errorf("%s The return parameter must be of type error", method.Name) - } if typ.NumIn() < 2 || typ.NumIn() > 4 { return fmt.Errorf("%s Unsupported parameter format", method.Name) @@ -183,6 +176,18 @@ func (handler *RpcHandler) suitableMethods(method reflect.Method) error { rpcMethodInfo.hasResponder = true } + if rpcMethodInfo.hasResponder && typ.NumOut() > 0 { + return fmt.Errorf("%s should not have return parameters", method.Name) + } + + if !rpcMethodInfo.hasResponder && typ.NumOut() != 1 { + return fmt.Errorf("%s The number of returned arguments must be 1", method.Name) + } + + if !rpcMethodInfo.hasResponder && typ.Out(0).String() != "error" { + return fmt.Errorf("%s The return parameter must be of type error", method.Name) + } + for i := parIdx; i < typ.NumIn(); i++ { if handler.isExportedOrBuiltinType(typ.In(i)) == false { return fmt.Errorf("%s Unsupported parameter types", method.Name) @@ -307,9 +312,11 @@ func (handler *RpcHandler) HandlerRpcRequest(request *RpcRequest) { requestHandle := request.requestHandle returnValues := v.method.Func.Call(paramList) - errInter := returnValues[0].Interface() - if errInter != nil { - err = errInter.(error) + if len(returnValues) > 0 { + errInter := returnValues[0].Interface() + if errInter != nil { + err = errInter.(error) + } } if v.hasResponder == false && requestHandle != nil {