簡體   English   中英

如果在http.HandlerFunc函數內發生緊急情況,它將不會發送到客戶端http狀態代碼

[英]If a panic occurs within the http.HandlerFunc function, it will not be sent to the client http status code

如果在http.HandlerFunc函數內發生緊急情況,則不會將其發送到客戶端http狀態代碼。 為什么會這樣,如何避免呢? 因為javascript XMLHttpRequest在未收到http狀態代碼時不能很好地工作。

在http響應沒有狀態且沒有正文內容的情況下,我們如何編寫ajax請求?

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)
    }
}

在這種情況下,您不應該驚慌。 恐慌將導致運行您的處理程序函數的當前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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM