37 lines
694 B
Go
37 lines
694 B
Go
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])
|
|
}
|