Files
platform/web/core/error.go

70 lines
1.0 KiB
Go
Raw Normal View History

2025-05-07 17:38:27 +08:00
package core
2025-03-18 17:57:07 +08:00
import (
2025-12-01 10:05:55 +08:00
"fmt"
"log/slog"
"platform/pkg/env"
"runtime"
)
type Err struct {
msg string
err error
errFile string
errLine int
errFunc string
}
func (e *Err) Error() string {
if e.err != nil {
2025-12-01 10:05:55 +08:00
slog.Debug(fmt.Sprintf("%s: %s", e.msg, e.err.Error()))
}
return e.msg
}
func (e *Err) Unwrap() error {
return e.err
}
func (e *Err) Source() *slog.Source {
return &slog.Source{
Function: e.errFunc,
File: e.errFile,
Line: e.errLine,
}
}
func newErr(msg string, err ...error) Err {
o := Err{
msg: msg,
}
if len(err) > 0 {
o.err = err[0]
}
if env.RunMode == env.RunModeDev {
pc, file, line, ok := runtime.Caller(2)
if ok {
o.errFile = file
o.errLine = line
o.errFunc = runtime.FuncForPC(pc).Name()
}
}
return o
}
type BizErr struct{ Err }
func NewBizErr(msg string, err ...error) (biz *BizErr) {
return &BizErr{newErr(msg, err...)}
}
type ServErr struct{ Err }
func NewServErr(msg string, err ...error) *ServErr {
return &ServErr{newErr(msg, err...)}
}