2 回答
TA贡献1834条经验 获得超8个赞
问题是您在标题之前发送了身体。这在任何语言中都行不通——这是 HTTP 的事实,而不是 Go 的事实。
它没有被您的测试捕获的原因是您的测试实际上是在滥用ResponseRecorder;您在地图中设置字段,然后直接从该地图读取字段。测试应该只检查ResponseRecorder.Result,它旨在为您提供客户端实际收到的结果,包括在发送正文时锁定标头:
if ctype := rr.Response().Header.Get("Content-Type"); ctype != "application/json" {
t.Errorf("content type header does not match: got %v want %v",
ctype, "application/json")
}
TA贡献1844条经验 获得超8个赞
只需将您的功能更改为:
func HealthCheckHandler(w http.ResponseWriter, r *http.Request) {
// this will cause a duplicate status header to be written
// w.WriteHeader(http.StatusOK)
w.Header().Set("Content-Type", "application/json")
io.WriteString(w, `{"alive": true}`)
}
- 2 回答
- 0 关注
- 113 浏览
添加回答
举报