登录
首页 >  Golang >  Go问答

如何在 Go Rpc 中使用自定义错误

来源:stackoverflow

时间:2024-03-12 12:15:31 429浏览 收藏

珍惜时间,勤奋学习!今天给大家带来《如何在 Go Rpc 中使用自定义错误》,正文内容主要涉及到等等,如果你正在学习Golang,或者是对Golang有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!

问题内容

我正在使用 go 标准库中的 rpc 包,并且我希望能够通过 rpc 调用返回我的自定义错误。

我有下面的自定义错误类:

const (
    unavailable = "unavailable"
    geterror    = "get-error"
    other = "generic-error"
)

type customerror struct {
    errorcode string
    msg       string
}

func (e *customerror) error() string {
    return fmt.sprintf("error type: %s, msg: %s", e.errorcode, e.msg)
}

以及以下 rpc 端点:

func (service *RpcService) Get(args *Args, reply *string) error {
    ....
    do something
    ...

    if err != nil {
        return CustomError{ErrorCode: GETERROR, Msg: ""}
    }
    
    return nil
}

问题是,当我在客户端检索错误时,我收到 rpc.servererror。我尝试将其转换为我的自定义错误类型,但我得到一个恐慌,说 interface conversion: error is rpc.servererror, not *customerror。基本上我的问题是:如何从 rpc 调用传播我的自定义错误类型。


解决方案


标准库以字符串形式返回错误,rpc.servererror

因此,在您的代码中,您从客户端收到的错误将类似于:

"Error type: unavailable, Msg: "

如果你想区分客户端的错误和client.get,你可以让你的customerror.error()更简单,例如:unavailable: something bad,然后你可以把它当作一个字符串。

或者您可以添加额外的字符串返回值来区分结果。

以上就是《如何在 Go Rpc 中使用自定义错误》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>