处理错误很无聊

我有一个结构体,它有一个提供响应的方法。


type ctrl struct {

    *base.AjaxCtrl

    file ini.File

}


func (rcv *ctrl) getVar() string {

    return mux.Vars(rcv.Req)["location"]

}


func (rcv *ctrl) getFile() string {

    return location.JoinPaths(folder, rcv.getVar()+ext)

}


func (rcv *ctrl) upload() {

    file, err := ini.LoadFile(rcv.getFile())

    if err != nil {

        rcv.AddErr("TextError", err.Error())

        return

    }

    rcv.file = file

}


// Convert text to json structure

func (rcv *ctrl) convertToJson() string {

    js, err := json.Marshal(rcv.file.Section("text/signup"))

    if err != nil {

        rcv.AddErr("ConvertError", err.Error())

        return ""

    }

    return string(js)

}


func (rcv *ctrl) serveHttp() (types.SuccsJSON, types.ErrorsJSON) {


    rcv.upload()

    if rcv.AnyErrors() {

        return nil, rcv.Errs

    }


    str := rcv.convertToJson()

    if rcv.AnyErrors() {

        return nil, rcv.Errs

    }

    return c.Sucss, nil

}

方法 serveHttp() 处理对客户端的响应。如您所见,我每次都使用 AnyError() 方法处理错误。我发现这种方式很无聊,而且可能是错误的设计。抛出恐慌而不是错误处理会更好吗?


func (rcv *ctrl) upload() {

    file, err := ini.LoadFile(rcv.getFile())

    if err != nil {

        rcv.AddErr("TextError", err.Error())

        panic()

    }

    rcv.file = file

}


海绵宝宝撒
浏览 161回答 1
1回答

慕勒3428872

不,不会更好。在 Go 中检查错误并不是一个糟糕的设计。另一方面,在没有理由恐慌时恐慌是糟糕的设计,因为它更难测试和调试。panic当错误不可恢复且程序状态无法修复时,Go Wiki明确不鼓励使用真正的例外情况。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go