code: func doRecover(errp *error) {
  	e := recover()
  	if e != nil {
  		if _, ok := e.(runtime.Error); ok {
  			panic(e)
  		}
  		if err, ok := e.(error); ok {
  			*errp = err
  		} else if errStr, ok := e.(string); ok {
  			*errp = errors.New(errStr)
  		} else {
  			*errp = fmt.Errorf("%v", e)
  		}
  	}
  	return
  }
docs: // doRecover is the handler that turns panics into returns from the top level of getTarget.