为什么';t http.ResponseWriter是否实现响应流End()调用?
在Node.js中,为了完成对流的写入(理论上是HTTP,告诉客户端没有更多数据),我们使用为什么';t http.ResponseWriter是否实现响应流End()调用?,http,go,Http,Go,在Node.js中,为了完成对流的写入(理论上是HTTP,告诉客户端没有更多数据),我们使用response.end()。使用Go,ResponseWriter界面如下所示: type ResponseWriter interface { Header() Header Write([]byte) (int, error) WriteHeader(statusCode int) } 所以我的问题有两个: 如何从ResponseWriter获取HTTP状态代码 更重要的是
response.end()
。使用Go,ResponseWriter界面如下所示:
type ResponseWriter interface {
Header() Header
Write([]byte) (int, error)
WriteHeader(statusCode int)
}
所以我的问题有两个:
http.ResponseWriter
实现中是不可能的。但这是一个接口,因此很容易编写自己的实现来记录状态。简单实现的开始可能是:
type statusRecorder struct {
http.ResponseWriter
status int
}
func (r *statusRecorder) WriteHeader(status int) {
r.status = status
r.ResponseWriter.WriteHeader(status)
}
虽然这似乎是API的一个限制,但实际上恰恰相反。通过使用接口,可以创建执行任何操作或记录任何所需信息的实现,而不限于标准库作者决定公开的任何功能2) 当处理程序返回时就完成了。关于1,你能澄清一下你的意思吗?您将状态代码写入写入写入程序,为什么要在处理程序中尝试从它获取状态?1)无法从响应写入程序获取状态代码,但应用程序可以记录应用程序设置的值2)处理程序函数返回到net/http服务器时请求完成。“如果您想在goroutine堆栈为空之前完成响应,该怎么办?”--我不明白您在这里的意思。您能详细说明一下吗?当然可以。事实上,您必须这样做。这是唯一的选择。是的,goroutine是发送响应后执行工作的一种常见方式。如前所述,“状态代码问题”这根本不是问题。如果尚未设置状态,您还需要实现写入并将状态设置为200。@ILoverReflection:是,或者在状态为0时推断为200。这就是为什么我说这只是实现的开始。