interview-one-stop-server/util/util.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])
}