Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xpkg
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
屠思豪
xpkg
Commits
639f55d7
提交
639f55d7
authored
11月 18, 2025
作者:
mooncake
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update
上级
a71424db
全部展开
显示空白字符变更
内嵌
并排
正在显示
12 个修改的文件
包含
102 行增加
和
53 行删除
+102
-53
response.go
gin/response/response.go
+11
-10
xerror_api.go
pkg/xerrors/xerror/xerror_api.go
+45
-13
xerror_api_code.go
pkg/xerrors/xerror/xerror_api_code.go
+8
-8
xerror_api_option.go
pkg/xerrors/xerror/xerror_api_option.go
+1
-1
xerror_error.go
pkg/xerrors/xerror/xerror_error.go
+26
-10
xerror_error_code.go
pkg/xerrors/xerror/xerror_error_code.go
+2
-2
xerror_error_format.go
pkg/xerrors/xerror/xerror_error_format.go
+1
-1
xerror_error_json.go
pkg/xerrors/xerror/xerror_error_json.go
+1
-1
xerror_error_stack.go
pkg/xerrors/xerror/xerror_error_stack.go
+2
-2
xerror_z_unit_test.go
pkg/xerrors/xerror/xerror_z_unit_test.go
+1
-1
controller.go
xcommon/controller.go
+4
-4
odao.go
xcommon/odao/odao.go
+0
-0
没有找到文件。
gin/response/response.go
浏览文件 @
639f55d7
...
...
@@ -4,6 +4,7 @@ package response
import
(
"bytes"
"encoding/json"
"fmt"
"net/http"
"strconv"
"time"
...
...
@@ -267,17 +268,17 @@ func Error(c *gin.Context, err error) {
c
.
Set
(
ctxutils
.
KeyRspCode
,
0
)
msg
:=
""
if
err
!=
nil
{
msg
=
err
.
Error
()
if
e
,
ok
:=
err
.
(
*
xerror
.
Error
);
ok
{
//if !errcode.IsSysDefinedError(xerr.Code()) {
// logger.Error(err.Error(), logger.Err(err), ctxutils.GinTraceIDField(c))
//}
if
e
.
Code
()
!=
errcode
.
InvalidParams
.
Code
()
{
logger
.
Error
(
err
.
Error
(),
logger
.
Err
(
err
),
ctxutils
.
GinTraceIDField
(
c
))
}
}
else
{
logger
.
Error
(
err
.
Error
(),
logger
.
Err
(
err
),
ctxutils
.
GinTraceIDField
(
c
))
switch
e
:=
err
.
(
type
)
{
case
*
xerror
.
BizError
,
*
xerror
.
ParamError
:
msg
=
e
.
Error
()
case
*
xerror
.
DBError
,
*
xerror
.
NetError
:
logger
.
Error
(
fmt
.
Sprintf
(
"[response]%s"
,
err
.
Error
()),
ctxutils
.
GinTraceIDField
(
c
))
msg
=
"网络开小差了,请稍后再试~"
default
:
msg
=
e
.
Error
()
logger
.
Error
(
fmt
.
Sprintf
(
"[response]%s"
,
err
.
Error
()),
ctxutils
.
GinTraceIDField
(
c
))
}
}
respJSONWith200
(
c
,
CustomErrorCode
,
msg
)
}
pkg/xerrors/xerror/xerror_api.go
浏览文件 @
639f55d7
...
...
@@ -8,16 +8,48 @@ import (
// New 用于创建一个自定义文本错误信息的 error 对象,并包含堆栈信息。
func
New
(
text
string
)
error
{
return
&
Err
or
{
return
&
Err
{
stack
:
callers
(),
text
:
text
,
code
:
xcode
.
CodeDefault
,
}
}
func
NewNetError
(
text
string
)
error
{
e
:=
NetError
{}
e
.
stack
=
callers
()
e
.
text
=
text
e
.
code
=
xcode
.
CodeDefault
return
&
e
}
func
NewDBError
(
text
string
)
error
{
e
:=
DBError
{}
e
.
stack
=
callers
()
e
.
text
=
text
e
.
code
=
xcode
.
CodeDefault
return
&
e
}
func
NewParamError
(
text
string
)
error
{
e
:=
ParamError
{}
e
.
stack
=
callers
()
e
.
text
=
text
e
.
code
=
xcode
.
CodeDefault
return
&
e
}
func
NewBizError
(
text
string
)
error
{
e
:=
BizError
{}
e
.
stack
=
callers
()
e
.
text
=
text
e
.
code
=
xcode
.
CodeDefault
return
&
e
}
// NewC add code
func
NewC
(
code
int
,
text
string
)
error
{
return
&
Err
or
{
return
&
Err
{
stack
:
callers
(),
text
:
text
,
code
:
code
,
...
...
@@ -49,21 +81,21 @@ func Join(errs ...error) error {
// Newf 用于创建一个自定义文本错误带参数信息的 error 对象,并包含堆栈信息。
func
Newf
(
format
string
,
args
...
any
)
error
{
return
&
Err
or
{
return
&
Err
{
stack
:
callers
(),
text
:
fmt
.
Sprintf
(
format
,
args
...
),
code
:
xcode
.
CodeDefault
,
}
}
func
Errorf
(
format
string
,
args
...
any
)
error
{
return
&
Err
or
{
return
&
Err
{
stack
:
callers
(),
text
:
fmt
.
Sprintf
(
format
,
args
...
),
code
:
xcode
.
CodeDefault
,
}
}
func
NewCf
(
code
int
,
format
string
,
args
...
any
)
error
{
return
&
Err
or
{
return
&
Err
{
stack
:
callers
(),
text
:
fmt
.
Sprintf
(
format
,
args
...
),
code
:
code
,
...
...
@@ -73,7 +105,7 @@ func NewCf(code int, format string, args ...any) error {
// NewSkip 用于创建一个自定义错误信息的 error 对象,并且忽略部分堆栈信息(按照当前调用方法位置往上忽略)。高级功能,一般开发者很少用得到。
// 参数 `skip` 指定堆栈跳过的层数。
func
NewSkip
(
skip
int
,
text
string
)
error
{
return
&
Err
or
{
return
&
Err
{
stack
:
callers
(
skip
),
text
:
text
,
code
:
xcode
.
CodeDefault
,
...
...
@@ -81,7 +113,7 @@ func NewSkip(skip int, text string) error {
}
func
NewSkipC
(
code
,
skip
int
,
text
string
)
error
{
return
&
Err
or
{
return
&
Err
{
stack
:
callers
(
skip
),
text
:
text
,
code
:
code
,
...
...
@@ -91,7 +123,7 @@ func NewSkipC(code, skip int, text string) error {
// NewSkipf 用于创建一个自定义错误信息的error对象,并且忽略部分堆栈信息(按照当前调用方法位置往上忽略)。
// 参数 `skip` 指定堆栈跳过的层数。
func
NewSkipf
(
skip
int
,
format
string
,
args
...
any
)
error
{
return
&
Err
or
{
return
&
Err
{
stack
:
callers
(
skip
),
text
:
fmt
.
Sprintf
(
format
,
args
...
),
code
:
xcode
.
CodeDefault
,
...
...
@@ -99,7 +131,7 @@ func NewSkipf(skip int, format string, args ...any) error {
}
func
NewSkipCf
(
code
,
skip
int
,
format
string
,
args
...
any
)
error
{
return
&
Err
or
{
return
&
Err
{
stack
:
callers
(
skip
),
text
:
fmt
.
Sprintf
(
format
,
args
...
),
code
:
code
,
...
...
@@ -112,7 +144,7 @@ func Wrap(err error, text string) error {
if
err
==
nil
{
return
nil
}
return
&
Err
or
{
return
&
Err
{
error
:
err
,
stack
:
callers
(),
text
:
text
,
...
...
@@ -125,7 +157,7 @@ func Wrapf(err error, format string, args ...any) error {
if
err
==
nil
{
return
nil
}
return
&
Err
or
{
return
&
Err
{
error
:
err
,
stack
:
callers
(),
text
:
fmt
.
Sprintf
(
format
,
args
...
),
...
...
@@ -138,7 +170,7 @@ func WrapSkip(skip int, err error, text string) error {
if
err
==
nil
{
return
nil
}
return
&
Err
or
{
return
&
Err
{
error
:
err
,
stack
:
callers
(
skip
),
text
:
text
,
...
...
@@ -151,7 +183,7 @@ func WrapSkipf(skip int, err error, format string, args ...any) error {
if
err
==
nil
{
return
nil
}
return
&
Err
or
{
return
&
Err
{
error
:
err
,
stack
:
callers
(
skip
),
text
:
fmt
.
Sprintf
(
format
,
args
...
),
...
...
pkg/xerrors/xerror/xerror_api_code.go
浏览文件 @
639f55d7
...
...
@@ -9,7 +9,7 @@ import (
// NewCode 用于创建一个自定义错误信息的 error 对象,并包含堆栈信息,并增加错误码对象的输入。
func
NewCode
(
code
int
,
text
...
string
)
error
{
return
&
Err
or
{
return
&
Err
{
stack
:
callers
(),
text
:
strings
.
Join
(
text
,
separatorSpace
),
code
:
code
,
...
...
@@ -18,7 +18,7 @@ func NewCode(code int, text ...string) error {
// NewCodef 用于创建一个自定义错误信息的 error 对象,并包含堆栈信息,并增加错误码对象的输入。
func
NewCodef
(
code
int
,
format
string
,
args
...
any
)
error
{
return
&
Err
or
{
return
&
Err
{
stack
:
callers
(),
text
:
fmt
.
Sprintf
(
format
,
args
...
),
code
:
code
,
...
...
@@ -27,7 +27,7 @@ func NewCodef(code int, format string, args ...any) error {
// NewCodeSkip 用于创建一个自定义错误信息的 error 对象,并包含堆栈信息,并增加错误码对象的输入。并且忽略部分堆栈信息(按照当前调用方法位置往上忽略)。
func
NewCodeSkip
(
code
int
,
skip
int
,
text
...
string
)
error
{
return
&
Err
or
{
return
&
Err
{
stack
:
callers
(
skip
),
text
:
strings
.
Join
(
text
,
separatorSpace
),
code
:
code
,
...
...
@@ -36,7 +36,7 @@ func NewCodeSkip(code int, skip int, text ...string) error {
// NewCodeSkipf 用于创建一个自定义错误信息的 error 对象,并包含堆栈信息,并增加错误码对象的输入。并且忽略部分堆栈信息(按照当前调用方法位置往上忽略)。
func
NewCodeSkipf
(
code
int
,
skip
int
,
format
string
,
args
...
any
)
error
{
return
&
Err
or
{
return
&
Err
{
stack
:
callers
(
skip
),
text
:
fmt
.
Sprintf
(
format
,
args
...
),
code
:
code
,
...
...
@@ -48,7 +48,7 @@ func WrapCode(code int, err error, text ...string) error {
if
err
==
nil
{
return
nil
}
return
&
Err
or
{
return
&
Err
{
error
:
err
,
stack
:
callers
(),
text
:
strings
.
Join
(
text
,
separatorSpace
),
...
...
@@ -61,7 +61,7 @@ func WrapCodef(code int, err error, format string, args ...any) error {
if
err
==
nil
{
return
nil
}
return
&
Err
or
{
return
&
Err
{
error
:
err
,
stack
:
callers
(),
text
:
fmt
.
Sprintf
(
format
,
args
...
),
...
...
@@ -74,7 +74,7 @@ func WrapCodeSkip(code int, skip int, err error, text ...string) error {
if
err
==
nil
{
return
nil
}
return
&
Err
or
{
return
&
Err
{
error
:
err
,
stack
:
callers
(
skip
),
text
:
strings
.
Join
(
text
,
separatorSpace
),
...
...
@@ -87,7 +87,7 @@ func WrapCodeSkipf(code int, skip int, err error, format string, args ...any) er
if
err
==
nil
{
return
nil
}
return
&
Err
or
{
return
&
Err
{
error
:
err
,
stack
:
callers
(
skip
),
text
:
fmt
.
Sprintf
(
format
,
args
...
),
...
...
pkg/xerrors/xerror/xerror_api_option.go
浏览文件 @
639f55d7
...
...
@@ -10,7 +10,7 @@ type Option struct {
// NewOption 用于自定义配置的错误对象创建。
func
NewOption
(
option
Option
)
error
{
err
:=
&
Err
or
{
err
:=
&
Err
{
error
:
option
.
Error
,
text
:
option
.
Text
,
code
:
option
.
Code
,
...
...
pkg/xerrors/xerror/xerror_error.go
浏览文件 @
639f55d7
...
...
@@ -8,14 +8,30 @@ import (
"github.com/pkg/errors"
)
// Err
or
自定义错误对象。
type
Err
or
struct
{
// Err 自定义错误对象。
type
Err
struct
{
error
error
// 包装错误。
stack
stack
// 堆栈数组,当创建或包装此错误时记录堆栈信息。
text
string
// 创建错误时自定义错误文本。
code
int
// 如有必要,错误码。
}
type
NetError
struct
{
Err
}
type
DBError
struct
{
Err
}
type
ParamError
struct
{
Err
}
type
BizError
struct
{
Err
}
const
(
// stackFilterKeyLocal 过滤当前错误模块路径的键。
stackFilterKeyLocal
=
"/xerrors/xerror"
...
...
@@ -33,7 +49,7 @@ func init() {
}
// Error 实现错误的接口,它将所有错误返回为字符串。
func
(
err
*
Err
or
)
Error
()
string
{
func
(
err
*
Err
)
Error
()
string
{
if
err
==
nil
{
return
""
}
...
...
@@ -48,14 +64,14 @@ func (err *Error) Error() string {
}
// Cause 获取根错误 error。
func
(
err
*
Err
or
)
Cause
()
error
{
func
(
err
*
Err
)
Cause
()
error
{
if
err
==
nil
{
return
nil
}
loop
:=
err
for
loop
!=
nil
{
if
loop
.
error
!=
nil
{
if
e
,
ok
:=
loop
.
error
.
(
*
Err
or
);
ok
{
if
e
,
ok
:=
loop
.
error
.
(
*
Err
);
ok
{
// 内部自定义错误。
loop
=
e
}
else
if
e
,
ok
:=
loop
.
error
.
(
ICause
);
ok
{
...
...
@@ -76,11 +92,11 @@ func (err *Error) Cause() error {
// Current 获取当前 error。
// 如果当前错误是 nil, 则返回 nil。
func
(
err
*
Err
or
)
Current
()
error
{
func
(
err
*
Err
)
Current
()
error
{
if
err
==
nil
{
return
nil
}
return
&
Err
or
{
return
&
Err
{
error
:
nil
,
stack
:
err
.
stack
,
text
:
err
.
text
,
...
...
@@ -89,7 +105,7 @@ func (err *Error) Current() error {
}
// Unwrap 获取下一层 error。
func
(
err
*
Err
or
)
Unwrap
()
error
{
func
(
err
*
Err
)
Unwrap
()
error
{
if
err
==
nil
{
return
nil
}
...
...
@@ -98,7 +114,7 @@ func (err *Error) Unwrap() error {
// Equal 错误对象比较。
// 如果它们的 `code` 和 `text` 都相同,则认为错误相同。
func
(
err
*
Err
or
)
Equal
(
target
error
)
bool
{
func
(
err
*
Err
)
Equal
(
target
error
)
bool
{
if
err
.
Error
()
==
target
.
Error
()
{
return
true
}
...
...
@@ -112,7 +128,7 @@ func (err *Error) Equal(target error) bool {
}
// Is 当前错误 `err` 的链接错误中是否包含错误 `target`。
func
(
err
*
Err
or
)
Is
(
target
error
)
bool
{
func
(
err
*
Err
)
Is
(
target
error
)
bool
{
if
Equal
(
err
,
target
)
{
return
true
}
...
...
pkg/xerrors/xerror/xerror_error_code.go
浏览文件 @
639f55d7
...
...
@@ -4,7 +4,7 @@ import "gitlab.wanzhuangkj.com/tush/xpkg/pkg/xerrors/xcode"
// Code 获取错误码。
// 如果没有错误代码,则返回 `xcode.CodeDefault`。
func
(
err
*
Err
or
)
Code
()
int
{
func
(
err
*
Err
)
Code
()
int
{
if
err
==
nil
{
return
xcode
.
CodeDefault
}
...
...
@@ -15,7 +15,7 @@ func (err *Error) Code() int {
}
// SetCode 使用指定 `code` 更新内部 `code` 。
func
(
err
*
Err
or
)
SetCode
(
code
int
)
{
func
(
err
*
Err
)
SetCode
(
code
int
)
{
if
err
==
nil
{
return
}
...
...
pkg/xerrors/xerror/xerror_error_format.go
浏览文件 @
639f55d7
...
...
@@ -11,7 +11,7 @@ import (
// %-v, %-s : 打印当前级别错误字符串;
// %+s : 打印完整堆栈错误列表;
// %+v : 打印错误字符串和完整堆栈错误列表
func
(
err
*
Err
or
)
Format
(
s
fmt
.
State
,
verb
rune
)
{
func
(
err
*
Err
)
Format
(
s
fmt
.
State
,
verb
rune
)
{
switch
verb
{
case
's'
,
'v'
:
switch
{
...
...
pkg/xerrors/xerror/xerror_error_json.go
浏览文件 @
639f55d7
...
...
@@ -2,6 +2,6 @@ package xerror
// MarshalJSON 实现 json.Marshal 接口。
// 注:这里不要使用指针作为其接收器。
func
(
err
Err
or
)
MarshalJSON
()
([]
byte
,
error
)
{
func
(
err
Err
)
MarshalJSON
()
([]
byte
,
error
)
{
return
[]
byte
(
`"`
+
err
.
Error
()
+
`"`
),
nil
}
pkg/xerrors/xerror/xerror_error_stack.go
浏览文件 @
639f55d7
...
...
@@ -22,7 +22,7 @@ type stackLine struct {
}
// Stack 以字符串形式返回错误堆栈信息。
func
(
err
*
Err
or
)
Stack
()
string
{
func
(
err
*
Err
)
Stack
()
string
{
if
err
==
nil
{
return
""
}
...
...
@@ -40,7 +40,7 @@ func (err *Error) Stack() string {
infos
=
append
(
infos
,
info
)
loopLinesOfStackInfo
(
loop
.
stack
,
info
)
if
loop
.
error
!=
nil
{
if
e
,
ok
:=
loop
.
error
.
(
*
Err
or
);
ok
{
if
e
,
ok
:=
loop
.
error
.
(
*
Err
);
ok
{
loop
=
e
}
else
{
infos
=
append
(
infos
,
&
stackInfo
{
...
...
pkg/xerrors/xerror/xerror_z_unit_test.go
浏览文件 @
639f55d7
...
...
@@ -221,7 +221,7 @@ func Test_SetCode(t *testing.T) {
assert
.
Equal
(
t
,
xerror
.
Code
(
err
),
-
1
)
assert
.
Equal
(
t
,
err
.
Error
(),
"123"
)
err
.
(
*
xerror
.
Err
or
)
.
SetCode
(
xcode
.
CodeValidationFailed
)
err
.
(
*
xerror
.
Err
)
.
SetCode
(
xcode
.
CodeValidationFailed
)
assert
.
Equal
(
t
,
xerror
.
Code
(
err
),
xcode
.
CodeValidationFailed
)
assert
.
Equal
(
t
,
err
.
Error
(),
"123"
)
}
...
...
xcommon/controller.go
浏览文件 @
639f55d7
...
...
@@ -2,7 +2,6 @@ package xcommon
import
(
"context"
"errors"
"net/http"
"os"
"reflect"
...
...
@@ -57,13 +56,14 @@ func (e *Controller) Bind(c *gin.Context, req any) error {
if
valid
,
ok
:=
req
.
(
IValid
);
ok
{
if
err
:=
valid
.
Valid
();
err
!=
nil
{
return
err
return
xerror
.
NewParamError
(
err
.
Error
())
}
}
storePagination
(
req
,
reflectPagination
(
c
))
c
.
Set
(
"reqbody"
,
req
)
return
nil
}
...
...
@@ -106,9 +106,9 @@ func zhError(err error) error {
strs
=
append
(
strs
,
zhStr
)
}
if
len
(
strs
)
>
0
{
return
errors
.
New
(
strings
.
Join
(
strs
,
";"
))
return
xerror
.
NewParamError
(
strings
.
Join
(
strs
,
";"
))
}
else
{
return
xerror
.
Join
(
errs
)
return
xerror
.
NewParamError
(
xerror
.
Join
(
errs
)
.
Error
()
)
}
}
return
err
...
...
xcommon/odao/odao.go
浏览文件 @
639f55d7
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论