Skip to content

Instantly share code, notes, and snippets.

@jtbonhomme
Created March 15, 2018 10:02
Show Gist options
  • Save jtbonhomme/7d89dbf3b70e06cd107c94243cf32eea to your computer and use it in GitHub Desktop.
Save jtbonhomme/7d89dbf3b70e06cd107c94243cf32eea to your computer and use it in GitHub Desktop.
recover from Go handler panic

Handler function


// GET an Object by its ID
func FindObjectEndpoint(w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)
    numObject, err := dao.FindById(params["id"])
    if err != nil {
        log.Printf("FindObjectEndpoint err: %s", err.Error())
        respondWithError(w, http.StatusBadRequest, "Invalid Object ID")
        return
    }
    respondWithJson(w, http.StatusOK, numObject)
}

Dao function

// Find Object by ID
func (m *NumObjectDAO) FindById(id string) (numObject Numobject, err error) {
    log.Printf("call db.findbyId\n")
    defer func() {
        log.Printf("Enter defer err: %s numObject: %v\n", err, numObject)
        if r := recover(); r != nil {
            log.Println("Recovered from panic value: ", r)
            err = errors.New("Unkown ID ")
        }
        log.Printf("Quit defer err: %s numObject: %v\n", err, numObject)
    }()
    err = db.C(COLLECTION).FindId(bson.ObjectIdHex(id)).One(&numObject)
    log.Printf("return db.findbyId\n")
    return numObject, err
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment