在Go項(xiàng)目中管理自定義錯(cuò)誤碼和錯(cuò)誤描述

一 說(shuō)明

1.1 當(dāng)前軟件環(huán)境,Windows10,VSCode

二 步驟

2.1 目的,建立統(tǒng)一的錯(cuò)誤碼-錯(cuò)誤描述入口,方便前端或用戶反饋時(shí)候查找問(wèn)題

2.2 實(shí)現(xiàn),大體想法就是,建立一套錯(cuò)誤碼,然后每個(gè)錯(cuò)誤碼,對(duì)應(yīng)一個(gè)錯(cuò)誤描述,使用map映射他們的對(duì)應(yīng)關(guān)系。

err_id.go文件

/*
功能:錯(cuò)誤碼
時(shí)間:2022-5-1
*/
package ERROR

type ID int

const (
    SUCCESS ID = 0 //成功

    AUTH_FAILURE ID = 100 //認(rèn)證失敗

    //注冊(cè),從1000開(kāi)始
    REGISTER_ACCOUNT_ERROR ID = 1000 //賬號(hào)錯(cuò)誤
    REGISTER_PWD_ERROR     ID = 1001 //密碼錯(cuò)誤

    //登錄,從2000開(kāi)始
    LOGIN_ACCOUNT_ERROR ID = 2000 //賬號(hào)錯(cuò)誤
    LOGIN_PWD_ERROR     ID = 2001 //密碼錯(cuò)誤

    //
)

//-----------------------------------------------
//                  the end
//-----------------------------------------------

err_msg.go文件
/*
功能:錯(cuò)誤描述
時(shí)間:2022-5-1
*/
package ERROR

type Message string

//錯(cuò)誤項(xiàng)
type error_item struct {
    id  ID
    msg Message
}

//-----------------------------------------------
//類
type ErrorManager struct {
    err_map map[ID]Message
}

var instance_error_manager *ErrorManager

//-----------------------------------------------
//函數(shù)定義
func GetInstance() *ErrorManager {
    if instance_error_manager == nil {
        instance_error_manager = &ErrorManager{}
        instance_error_manager.bind()
    }
    return instance_error_manager
}

//查找錯(cuò)誤消息
func (e *ErrorManager) Find(err_id ID) Message {
    err_msg, ok := e.err_map[err_id]
    if !ok {
        panic("錯(cuò)誤碼需要配置")
    }
    return err_msg
}

//綁定關(guān)系
func (e *ErrorManager) bind() {
    //配置
    error_configs := []error_item{
        {SUCCESS, "成功"},

        {AUTH_FAILURE, "認(rèn)證失敗"},

        //注冊(cè)
        {REGISTER_ACCOUNT_ERROR, "注冊(cè)失敗,賬號(hào)不合法或重復(fù)"},
        {REGISTER_PWD_ERROR, "注冊(cè)失敗,密碼不合法"},

        //登錄
        {LOGIN_ACCOUNT_ERROR, "登錄失敗,賬號(hào)錯(cuò)誤"},
        {LOGIN_PWD_ERROR, "登錄失敗,密碼錯(cuò)誤"},
    }

    e.err_map = make(map[ID]Message)
    for i := 0; i < len(error_configs); i++ {
        config := error_configs[i]
        key := config.id
        e.err_map[key] = config.msg
    }
}

//-----------------------------------------------
//測(cè)試
func test_error() {
    e := GetInstance()
    t := e.Find(SUCCESS)

    print(t)
}

//引入測(cè)試
func Import_test_error() {
    //test_error()
}

//-----------------------------------------------
//                  the end
//-----------------------------------------------

包外部使用,只需要關(guān)注 錯(cuò)誤碼,錯(cuò)誤描述通過(guò)查詢獲?。?err_id := ERROR.LOGIN_ACCOUNT_ERROR
err_msg := ERROR.GetInstance().Find(err_id)

學(xué)海無(wú)涯,錯(cuò)誤難免,如有發(fā)現(xiàn),盡請(qǐng)指正。

--the end

?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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