123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- package rescode
- import (
- "fmt"
- "net/http"
- )
- // 只允许使用下面的几个http状态码
- const (
- HttpCode200 = http.StatusOK
- HttpCode400 = http.StatusBadRequest
- HttpCode401 = http.StatusUnauthorized
- HttpCode403 = http.StatusForbidden
- HttpCode404 = http.StatusNotFound
- HttpCode500 = http.StatusInternalServerError
- )
- const (
- successCode = 000000
- unknownCode = 999999
- )
- var (
- successErrCode = ErrCode{
- httpCode: HttpCode200,
- code: successCode,
- message: "成功",
- reference: "",
- }
- unknownErrCode = ErrCode{
- httpCode: HttpCode500,
- code: unknownCode,
- message: "未知错误",
- reference: "未知错误,请联系系统开发者",
- }
- )
- type ErrCode struct {
- httpCode int
- code int
- cause error
- message string
- reference string
- tips string
- }
- func NewErrCode(httpCode, code int, message, reference string) *ErrCode {
- return &ErrCode{
- httpCode: httpCode,
- code: code,
- message: message,
- reference: reference,
- }
- }
- func (ec *ErrCode) HTTPStatus() int {
- return ec.httpCode
- }
- func (ec *ErrCode) Code() string {
- return fmt.Sprintf("%06d", ec.code)
- }
- func (ec *ErrCode) Reference() string {
- return ec.reference
- }
- func (ec *ErrCode) Message() string {
- return ec.message
- }
- func (ec *ErrCode) Cause() error {
- return ec.cause
- }
- func (ec *ErrCode) Error() string {
- var cause string
- if ec.cause != nil {
- cause = ec.cause.Error()
- }
- return fmt.Sprintf("response:%s tips:%s cause:%s", ec.message, ec.tips, cause)
- }
- func RegisterErrorWithCause(cause error, errCode *ErrCode) error {
- return &ErrCode{
- httpCode: errCode.httpCode,
- code: errCode.code,
- cause: cause,
- tips: "",
- message: errCode.message,
- reference: errCode.reference,
- }
- }
- func RegisterErrorWithMessage(cause error, tips string, errCode *ErrCode) error {
- return &ErrCode{
- httpCode: errCode.httpCode,
- code: errCode.code,
- cause: cause,
- message: errCode.message,
- tips: tips,
- reference: errCode.reference,
- }
- }
- func ParseCode(err error) *ErrCode {
- if err == nil {
- return nil
- }
- if v, ok := err.(*ErrCode); ok {
- return v
- }
- return &unknownErrCode
- }
|