How to set HTTP status code on http.ResponseWriter

Use http.ResponseWriter.WriteHeader. From the documentation:

WriteHeader sends an HTTP response header with status code. If WriteHeader is not called explicitly, the first call to Write will trigger an implicit WriteHeader(http.StatusOK). Thus explicit calls to WriteHeader are mainly used to send error codes.

Example:

func ServeHTTP(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusInternalServerError)
    w.Write([]byte("500 - Something bad happened!"))
}

w.WriteHeader(http.StatusInternalServerError)
w.WriteHeader(http.StatusForbidden)

full list here


Apart from WriteHeader(int) you can use the helper method http.Error, for example:

func yourFuncHandler(w http.ResponseWriter, r *http.Request) {

    http.Error(w, "my own error message", http.StatusForbidden)

    // or using the default message error

    http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
}

http.Error() and http.StatusText() methods are your friends

Tags:

Go