Golang錯(cuò)誤處理相關(guān)

錯(cuò)誤處理

    _, err := os.OpenFile(filename, os.O_EXCL|os.O_CREATE, 0666)
    if err != nil {
        if pahErr, ok := err.(*os.PathError); !ok {
            panic(err)
        }else{
            fmt.Printf("%s %s %s\n",pahErr.Path,pahErr.Op,pahErr.Err)
        }
        return
    }

統(tǒng)一實(shí)現(xiàn)任務(wù)處理

type appHandler func(w http.ResponseWriter, req *http.Request) error

// errWrapper 錯(cuò)誤處理
func errWrapper(handler appHandler) func(http.ResponseWriter, *http.Request){
    return func(w http.ResponseWriter, req *http.Request){
        err := handler(w, req)
        if err != nil {
            code := http.StatusOK
            switch {
            case os.IsNotExist(err):
                code = http.StatusNotFound
            case os.IsPermission(err):
                code = http.StatusForbidden
            default:
                code = http.StatusInternalServerError
            }
            http.Error(w, http.StatusText(code), code)
        }
    }
}


func HandleFileListing(w http.ResponseWriter, req *http.Request) error{
    path := req.URL.Path[len("/list/"):]
    file, err := os.Open(path)
    if err != nil {
        return err
    }
    defer file.Close()

    all, err := ioutil.ReadAll(file)
    if err != nil {
        return err
    }
    w.Write(all)
    return nil
}

panic兜底處理 recover

    defer func(){
        r := recover()
        if err, ok := r.(error); ok {
            fmt.Println(err)
        } else {
            panic(err)
        }
    }()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容