AgentSkillsCN

error-codes-skill

当用户提出“实现错误码”“错误处理中间件”“统一错误码”“错误处理”“业务错误码”,或需要对错误码进行管理,包括定义业务错误码、构建错误处理中间件、返回统一格式的错误响应,以及进行错误码的集中化管理时,应使用此技能。

SKILL.md
--- frontmatter
name: error-codes-skill
description: This skill should be used when the user asks to "implement error codes", "error handling middleware", "统一错误码", "错误处理", "业务错误码", or needs to handle error codes including defining business error codes, error handling middleware, returning unified format error responses, and error code management.

统一错误码管理

错误码定义

go
package errorCodes

import "errors"

var (
    // 通用错误
    Success           = errors.New("success")
    ServerInternalErr = errors.New("server internal error")
    ParamInputErr     = errors.New("param input error")
    DatabaseErr       = errors.New("database error")
    CacheErr          = errors.New("cache error")
    NotFoundErr       = errors.New("not found")
    UnauthorizedErr   = errors.New("unauthorized")

    // 业务错误 (自定义)
    MatchNotFound     = errors.New("match not found")
    MarketSuspended   = errors.New("market is suspended")
    OddsExpired       = errors.New("odds expired")
)

错误响应处理

go
// Handler 中返回错误
func GetMatchesScheduleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        var req types.MatcheScheduleReq
        if err := httpx.Parse(r, &req); err != nil {
            httpx.ErrorCtx(r.Context(), w, errorCodes.ParamInputErr)
            return
        }

        l := matches.NewGetMatchesScheduleLogic(r.Context(), svcCtx)
        resp, err := l.GetMatchesSchedule(&req)
        if err != nil {
            httpx.ErrorCtx(r.Context(), w, err)  // 自动转换为 JSON 响应
        } else {
            httpx.OkJsonCtx(r.Context(), w, resp)
        }
    }
}

统一响应结构

go
type Response struct {
    Code      int32       `json:"code"`
    Data      interface{} `json:"data,omitempty"`
    Msg       string      `json:"msg,omitempty"`
    Timestamp int64       `json:"timestamp,omitempty"`
}

// 成功响应
httpx.OkJsonCtx(r.Context(), w, &Response{
    Code: 0,
    Data: resp,
})

// 错误响应
httpx.ErrorCtx(r.Context(), w, errorCodes.ParamInputErr)

错误码常量定义

go
package constant

const (
    MatchStatusWaiting     int32 = 1  // 未开赛
    MatchStatusLive        int32 = 2  // 进行中
    MatchStatusEnd         int32 = 3  // 结束
    MatchStatusInterrupted int32 = 4  // 中断
    MatchStatusPostponed   int32 = 5  // 推迟
    MatchStatusCancel      int32 = 6  // 取消
    MatchStatusUncertain   int32 = 7  // 不确定
)