在 Node.js 中,为了完成对流的写入(理论上使用 HTTP,告诉客户端没有更多数据),我们使用response.end(). 使用 Go,ResponseWriter 接口类似于:type ResponseWriter interface { Header() Header Write([]byte) (int, error) WriteHeader(statusCode int)}所以我的问题是双重的:我们如何从 ResponseWriter 中获取 HTTP 状态码?更重要的是: Go(以及像 Mux 这样的路由器)如何知道程序员何时完成对 ResponseWriter 的写入?是goroutine结束的时候吗?如果你想在 goroutine 堆栈为空之前完成响应怎么办?在 ResponseWriter 接口中没有 End() 方法似乎是一个实现缺陷。
1 回答
慕工程0101907
TA贡献1887条经验 获得超5个赞
http.ResponseWriter这在标准实现中是不可能的。但这是一个接口,所以很容易编写自己的记录状态的实现。一个简单实现的开始可能是:
type statusRecorder struct {
http.ResponseWriter
status int
}
func (r *statusRecorder) WriteHeader(status int) {
r.status = status
r.ResponseWriter.WriteHeader(status)
}
虽然这看起来像是 API 的限制,但实际上恰恰相反。通过使用接口,可以创建一个执行任何操作或记录您想要的任何信息的实现,而不是局限于标准库作者可能决定公开的任何功能。
当处理程序返回时,它就完成了。如果您希望在发送响应后做额外的工作,您可以生成一个 goroutine 以在主处理程序返回后继续操作。
- 1 回答
- 0 关注
- 168 浏览
添加回答
举报
0/150
提交
取消
