From f9b900b2caa031c3e342623a7a3449ad256b1eac Mon Sep 17 00:00:00 2001 From: Astone Date: Tue, 3 Dec 2019 12:47:29 +0800 Subject: [PATCH] optimize: a better way for return error --- server/grpc/grpc.go | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/server/grpc/grpc.go b/server/grpc/grpc.go index 942d1a8f..0fa3d0f0 100644 --- a/server/grpc/grpc.go +++ b/server/grpc/grpc.go @@ -343,27 +343,22 @@ func (g *grpcServer) processRequest(stream grpc.ServerStream, service *service, } // define the handler func - fn := func(ctx context.Context, req server.Request, rsp interface{}) error { - ch := make(chan error, 1) - defer close(ch) - + fn := func(ctx context.Context, req server.Request, rsp interface{}) (err error) { defer func() { if r := recover(); r != nil { log.Log("panic recovered: ", r) log.Logf(string(debug.Stack())) - ch <- errors.InternalServerError("go.micro.server", "panic recovered: %v", r) + err = errors.InternalServerError("go.micro.server", "panic recovered: %v", r) } }() returnValues = function.Call([]reflect.Value{service.rcvr, mtype.prepareContext(ctx), reflect.ValueOf(argv.Interface()), reflect.ValueOf(rsp)}) // The return value for the method is an error. - if err := returnValues[0].Interface(); err != nil { - ch <- err.(error) + if rerr := returnValues[0].Interface(); rerr != nil { + err = rerr.(error) } - ch <- nil - - return <-ch + return err } // wrap the handler func