我有点想知道为什么下面的代码确实有效:
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方法。
因此,此方法确实收到了它写入的副本。
我怎么会在我的浏览器中看到响应?没想到作者被抄袭了。
慕的地10843
相关分类