package util import ( "context" "fmt" "github.com/google/uuid" "interview-one-stop-server/constant" "runtime" ) func CreateContextWithTraceID() context.Context { return context.WithValue(context.Background(), constant.TraceID, GenUUID()) } func GenUUID() string { return uuid.New().String() } // PanicToError Panic转换为error func PanicToError(f func()) (err error) { defer func() { if e := recover(); e != nil { err = fmt.Errorf(PanicTrace(e)) } }() f() return } // PanicTrace panic调用链跟踪 func PanicTrace(err interface{}) string { stackBuf := make([]byte, 4096) n := runtime.Stack(stackBuf, false) return fmt.Sprintf("panic: %v %s", err, stackBuf[:n]) }