我有點(diǎn)想知道為什么下面的代碼確實(shí)有效: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) }}默認(rèn)情況下,Go 復(fù)制提供給方法的參數(shù)。因此,“/api/v1/health”的 HTTP 處理程序確實(shí)需要一個(gè)編寫(xiě)器,我們將其傳遞給該returnJSON方法。因此,此方法確實(shí)收到了它寫(xiě)入的副本。我怎么會(huì)在我的瀏覽器中看到響應(yīng)?沒(méi)想到作者被抄襲了。
1 回答

慕的地10843
TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
你認(rèn)為ResponseWriter是一個(gè)結(jié)構(gòu)體,但它是一個(gè)接口。
每次您發(fā)送writer http.ResponseWriter
到您的方法時(shí),您都會(huì)發(fā)送指向?qū)崿F(xiàn)該接口的結(jié)構(gòu)的指針。
執(zhí)行此行以查看實(shí)際類(lèi)型:
fmt.Printf("%T\n",?writer)
- 1 回答
- 0 關(guān)注
- 122 瀏覽
添加回答
舉報(bào)
0/150
提交
取消