diff --git a/pkg/rpc/errors/utils.go b/pkg/rpc/errors/utils.go new file mode 100644 index 0000000..7b078d2 --- /dev/null +++ b/pkg/rpc/errors/utils.go @@ -0,0 +1,32 @@ +// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. + +package errors + +import ( + "errors" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +// HumanError 格式化GRPC相关错误 +func HumanError(err error) error { + if err == nil { + return err + } + errStatus, ok := status.FromError(err) + if !ok { + return err + } + switch errStatus.Code() { + case codes.InvalidArgument: + return errors.New("错误的RPC参数:" + err.Error()) + case codes.DeadlineExceeded: + return errors.New("RPC操作超时,请重试:" + err.Error()) + case codes.Unimplemented: + return errors.New("请求的RPC服务或方法不存在,可能是没有升级API节点或者当前节点没有升级:" + err.Error()) + case codes.Unavailable: + return errors.New("RPC当前不可用,请确保API节点已启动,并检查当前节点和API节点之间的网络连接是正常的:" + err.Error()) + } + + return err +}