bcd.go
func Recover(t Tracer, repanic bool, options *TraceOptions) {
	if r := recover(); r != nil {
		err, ok := r.(error)
		if !ok {
			// We use the runtime type of the error object for
			// classification (and thus potential grouping);
			// *bcd.PanicError is a more descriptive classifier
			// than something like *errors.errorString.
			err = &panicError{r}
		}

		Trace(t, err, options)

		if repanic {
			panic(r)
		}
	}
}
func Recover(t Tracer, repanic bool, options *TraceOptions) {
	if r := recover(); r != nil {
		err, ok := r.(error)
		if !ok {
			// We use the runtime type of the error object for
			// classification (and thus potential grouping);
			// *bcd.PanicError is a more descriptive classifier
			// than something like *errors.errorString.
			err = &panicError{r}
		}

		Trace(t, err, options)

		if repanic {
			panic(r)
		}
	}
}
func Recover ( t Tracer , repanic bool , options * TraceOptions ) { if r := recover ( ) ; r != nil { err , ok := r . ( error ) if ! ok { // We use the runtime type of the error object for // classification (and thus potential grouping); // *bcd.PanicError is a more descriptive classifier // than something like *errors.errorString. err = & panicError { r } } Trace ( t , err , options ) if repanic { panic ( r ) } } }
// Establishes a panic handler that will execute the specified Tracer in
// response. If repanic is true, this will repanic again after Tracer execution
// completes (with the original value returned by recover()).
// This must be used with Go's defer, panic, and recover pattern; see
// https://blog.golang.org/defer-panic-and-recover.
Establishes a panic handler that will execute the specified Tracer in response . If repanic is true this will repanic again after Tracer execution completes ( with the original value returned by recover () ) . This must be used with Go s defer panic and recover pattern ; see https : // blog . golang . org / defer - panic - and - recover .