为了账号安全,请及时绑定邮箱和手机立即绑定

指针与值。

指针与值。

Go
萧十郎 2023-05-08 16:36:55
我有点想知道为什么下面的代码确实有效:var serverStartedTime time.Time // Holds the time since the server is started.type ServerInformation struct {    Uptime ServerUptimeInformation `json:"uptime"`}type ServerUptimeInformation struct {    Hours       int64 `json:"hours"`    Minutes     int64 `json:"minutes"`    Seconds     int64 `json:"seconds"`    NanoSeconds int64 `json:"nanoSeconds"`}func main() {    serverStartedTime = time.Now()    http.HandleFunc("/api/v1/health", getHealthHandler)    log.Fatal(http.ListenAndServe(":8000", nil))}func handler(writer http.ResponseWriter, request *http.Request) {    fmt.Fprintf(writer, "URL.Path = %q\n", request.URL.Path)}func getHealthHandler(writer http.ResponseWriter, request *http.Request) {    serverUptime := time.Now().Sub(serverStartedTime)    hours := int64(serverUptime.Hours())    minutes := int64(serverUptime.Minutes()) - (hours * 60)    seconds := int64(serverUptime.Seconds()) - (hours * 60) - (minutes * 60)    nanoSeconds := int64(serverUptime.Nanoseconds()) - (hours * 60) - (minutes * 60) - (seconds * 1000000000)    serverInformation := ServerInformation{        ServerUptimeInformation{            hours, minutes, seconds, nanoSeconds,        },    }    returnJSON(writer, serverInformation)}func returnJSON(writer http.ResponseWriter, data ...interface{}) {    dataJSON, marshalError := json.Marshal(data)    if marshalError != nil {        writer.WriteHeader(http.StatusInternalServerError)    } else {        writer.WriteHeader(http.StatusOK)        writer.Header().Set("Content-Type", "application/json")        writer.Write(dataJSON)    }}默认情况下,Go 复制提供给方法的参数。因此,“/api/v1/health”的 HTTP 处理程序确实需要一个编写器,我们将其传递给该returnJSON方法。因此,此方法确实收到了它写入的副本。我怎么会在我的浏览器中看到响应?没想到作者被抄袭了。
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

你认为ResponseWriter是一个结构体,但它是一个接口。

每次您发送writer http.ResponseWriter到您的方法时,您都会发送指向实现该接口的结构的指针。

执行此行以查看实际类型:

fmt.Printf("%T\n", writer)


查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信