Если в функции http.HandlerFunc возникает паника, она не будет отправлена ​​клиенту с кодом состояния http - PullRequest
0 голосов
/ 26 октября 2018

Если в функции http.HandlerFunc возникает паника, она не будет отправлена ​​на код состояния http клиента. Почему это и как этого можно избежать? Потому что javascript XMLHttpRequest не работает хорошо, когда он не получает код состояния http.

Как написать ajax-запрос для ситуаций, когда у ответа http нет состояния и содержимого тела?

func main() {
    var counter int

    http.HandleFunc("/hello", func(writer http.ResponseWriter, request *http.Request) {
        if counter%2 == 0 {
            counter++
            writer.Write([]byte(time.Now().String()))
        } else {
            counter++
            panic(":(")
        }
    })

    err := http.ListenAndServe(":9999", nil)
    if err != nil {
        panic(err)
    }
}

1 Ответ

0 голосов
/ 26 октября 2018

Вы не должны использовать панику в этом случае.Паника приведет к тому, что текущая подпрограмма go, выполняющая функцию-обработчик, будет завершена, не записав в ответ ничего, что вам не нужно, вместо этого вернет код ошибки, используя метод WriteHeader:

func main() {
    var counter int

    http.HandleFunc("/hello", func(writer http.ResponseWriter, request *http.Request) {
        if counter%2 == 0 {
            counter++
            writer.Write([]byte(time.Now().String()))
        } else {
            counter++
            writer.WriteHeader(http.StatusInternalServerError)
        }
    })

    err := http.ListenAndServe(":9999", nil)
    if err != nil {
        panic(err)
    }
}

https://golang.org/pkg/net/http/#ResponseWriter

...