久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Go 自定義error錯(cuò)誤

 新進(jìn)小設(shè)計(jì) 2021-05-26

原文鏈接: http://www./post/17.html
Go的error比較靈活.但是自身對(duì)error處理的機(jī)制有不太好用,我們可以自定義錯(cuò)誤輸出: 
只要所有實(shí)現(xiàn)了 Error() 方法的對(duì)象都可以, 這里給個(gè)比較簡(jiǎn)單的demo,后續(xù)整理一個(gè)error的優(yōu)化封裝:

package main


import (
    "fmt"
)

type NameEmtpyError struct {
    name string
}
//NameEmtpyError實(shí)現(xiàn)了 Error() 方法的對(duì)象都可以
func (e *NameEmtpyError) Error() string {
    return "name 不能為空"
}

func NameCheck(name string) (bool, error) {
    if name == "" {
        return false, &NameEmtpyError{name} // 注意error這里必須是地址&引用
    }
    return true, nil
}

func main() {
    name := ""
    if check, err := NameCheck(name); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(check)
    }

} 

在go里定義錯(cuò)誤異常的方式有這么兩種,,但都需要你的返回值是error類(lèi)型的:
    第一種方式是使用golang標(biāo)準(zhǔn)庫(kù)包errors 來(lái)定義錯(cuò)誤,。使用方法很簡(jiǎn)單,只需要 return errors.New(“錯(cuò)誤信息”)  ,。 這樣就是一個(gè)最簡(jiǎn)單的錯(cuò)誤返回,。

    第二種方式是借用struct結(jié)構(gòu)體,創(chuàng)建一個(gè)struct的Error()方法,,注意這個(gè)方法名是Error,,不然會(huì)出現(xiàn)找不到Error方法。
下面我們看一個(gè)比較完整的Error的使用方法,。不僅有errors,,還有struct Error()方式. 

package main

import (
    "errors"
    "fmt"
)

type equalError struct {
    Num int
}

//方法名字是Error()
func (e equalError) Error() string {
    return fmt.Sprintf("當(dāng)前數(shù)字是 %d ,大于10", e.Num)
}

//使用errors.New簡(jiǎn)單生成
func Equal(n int) (int, error) {
    if n > 10 {
        return -1, errors.New("大于10") //生成一個(gè)簡(jiǎn)單的 error 類(lèi)型
    }
    return n, nil
}

func DiyEqual(n int) (int, error) {
    if n > 10 {
        return -1, equalError{Num: n} // 會(huì)調(diào)用equalError的Error方法
    }
    return n, nil
}

func main() {
    //使用errors.New生成error對(duì)象
    if result, err := Equal(20); err != nil {
        fmt.Println("錯(cuò)誤:", err)
    } else {
        fmt.Println("結(jié)果:", result)
    }

    //不適用erros,自定義錯(cuò)誤方式.
    if result, err := DiyEqual(20); err != nil {
        fmt.Println("錯(cuò)誤:", err)
    } else {
        fmt.Println("結(jié)果:", result)
    }

}

當(dāng)然實(shí)際開(kāi)發(fā)項(xiàng)目也不建議這么寫(xiě),太lower不說(shuō),也不好擴(kuò)展. 下一篇準(zhǔn)備寫(xiě)個(gè)demo,封裝優(yōu)化錯(cuò)誤輸出的處理.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多