简化 golang 中重复出现的 switch 情况

use*_*964 2 go

我想了解是否有更好的方法来简化 golang 中重复出现的 switch 情况。我有一个可以返回多个错误的方法,但我对 3 个特定错误感兴趣,在这些错误中我需要返回特定的带注释的错误而不是一般错误。但是,case1,case2 返回 err1,err2 但是如果是 case3,我需要使用不同的参数调用相同的方法,并且如果该方法返回 err1,err2 也需要处理。如果您有任何建议,请提供。目前我正在按以下方式处理,但试图看看是否可以简化调用 case1、case2 的重复性。

    _, err := doSomething(var1)
    if err != nil {
        switch err.Error() {
        case case1:
            return err1
        case case2:
            return err2
        case case3:
            _, err := doSomething(var2)
            switch err.Error() {
            case case1:
                return err1
            case case2:
                return err2
            default:
                return err
            }
        default:
            return err
Run Code Online (Sandbox Code Playgroud)

如果您需要更多详细信息或需要对我的问题本身进行更多说明,请告诉我。

提前致谢。

小智 6

将错误翻译为特殊情况。继续常见处理。

_, err := doSomething(var1)
if err != nil {
    if err.Error() == case3 {
        _, err = doSomething(var2)
    }
    switch err.Error() {
    case case1:
        return err1
    case case2:
        return err2
    default:
        return err
    }
}
Run Code Online (Sandbox Code Playgroud)