为什么golang http response writer接口不公开状态码?[已关闭]

lskq00tm  于 2023-02-06  发布在  Go
关注(0)|答案(2)|浏览(128)

已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。

2天前关闭。
Improve this question
Golang包http提供 *HTTP客户端 * 和 * 服务器 * 实现。但在此包中有一个接口ResponseWriter。ResponseWriter接口由 HTTP处理程序用于构造HTTP响应 。虽然它正在构造HTTP响应,但仍然没有获取响应的状态代码的功能。
这背后的原因或逻辑是什么?

njthzxwz

njthzxwz1#

虽然它正在构造HTTP响应,但仍然没有获取响应状态代码的功能。
如果你正在构造响应,你可能对 * 设置 * 状态码感兴趣。

w.WriteHeader(200)
iswrvxsc

iswrvxsc2#

在HTTP处理程序中

responseWriter.WriteHeader(http.StatusOK)

可以使用,但如果使用其他方式编写响应,则会隐式调用。引用文档

// 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 or 1xx informational responses.

在HTTP请求情况下,可以使用response.StatusCode

示例服务器

package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    startServer()
}

func startServer() {
    fmt.Println("hello buddy!")
    http.HandleFunc("/", handler)
    err := http.ListenAndServe(":3333", nil)
    if err == http.ErrServerClosed {
        fmt.Println("server closed")
    } else if err != nil {
        fmt.Printf("error starting server: %s\n", err)
    }
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Println("got request. sending response")
    // w.WriteHeader(http.StatusOK)
    io.WriteString(w, "Hi ! HTTP\n")
}

示例客户端

func sendRequest() {
    r, err := http.Get("https://google.com")
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(r.StatusCode)
    }
}

相关问题