github.com/keysonZZZ/kmg@v0.0.0-20151121023212-05317bfd7d39/kmgErr/error.go (about) 1 package kmgErr 2 3 import ( 4 "fmt" 5 "runtime/debug" 6 "time" 7 8 "github.com/bronze1man/kmg/kmgDebug" 9 "github.com/bronze1man/kmg/kmgLog" 10 ) 11 12 // useful in test 13 func PanicIfError(err error) { 14 if err != nil { 15 panic(err) 16 } 17 } 18 19 func LogErrorWithStack(err error) { 20 if err == nil { 21 return 22 } 23 s := "" 24 if err != nil { 25 s = err.Error() 26 } 27 kmgLog.Log("error", s, kmgDebug.GetCurrentStack(1)) 28 } 29 30 func LogUserErrorWithStack(err error) { 31 if err == nil { 32 return 33 } 34 s := "" 35 if err != nil { 36 s = err.Error() 37 } 38 kmgLog.Log("userError", s, kmgDebug.GetCurrentStack(1)) 39 } 40 41 func LogError(err error) { 42 s := "" 43 if err != nil { 44 s = err.Error() 45 } 46 kmgLog.Log("error", s) 47 } 48 49 var PrintStack = debug.PrintStack 50 51 type PanicErr struct { 52 PanicObj interface{} 53 } 54 55 func (e *PanicErr) Error() string { 56 return fmt.Sprintf("%#v", e.PanicObj) 57 } 58 59 // 把panic转换成err返回, 60 // 没有panic时,返回nil 61 // panic(nil)会导致返回nil(没有错误)(这个目前没有找到靠谱的方法解决) 62 func PanicToError(f func()) (err error) { 63 defer func() { 64 out := recover() 65 if out == nil { 66 return 67 } 68 err1, ok := out.(error) 69 if ok { 70 err = err1 71 return 72 } 73 err = &PanicErr{PanicObj: out} 74 }() 75 f() 76 return nil 77 } 78 79 func PanicToErrorAndLog(f func()) (err error) { 80 defer func() { 81 out := recover() 82 if out == nil { 83 err = nil 84 return 85 } 86 87 err1, ok := out.(error) 88 if ok { 89 err = err1 90 LogErrorWithStack(err) 91 return 92 } 93 err = &PanicErr{PanicObj: out} 94 LogErrorWithStack(err) 95 }() 96 f() 97 return nil 98 } 99 100 // 要求这个函数在规定的时间内完成 101 // 要么在这个时间范围内完成,要么返回错误 102 // 会在新线程中执行函数 103 // 104 func ErrInTime(dur time.Duration, f func()) (err error) { 105 return nil 106 } 107 108 func Client(reason string, http_code int) { 109 110 }