Go http.ResponseWriter刷新/结束时执行处理程序函数?
有没有一种方法可以钩住http.ResponseWriter上的刷新/结束事件,以便在发送之前执行一个向writer写入更多内容的处理程序。您可以创建自己的Go http.ResponseWriter刷新/结束时执行处理程序函数?,go,Go,有没有一种方法可以钩住http.ResponseWriter上的刷新/结束事件,以便在发送之前执行一个向writer写入更多内容的处理程序。您可以创建自己的http.ResponseWriter来实现这一点,也可以使用“中间件模式”: 游乐场:。您可以简单地包装,在包装的处理程序返回后,您可以将进一步的数据写入: 访问任何URL都将导致响应: Hello World 生产环境中需要牢记的事项: 包装器还应检查响应代码或包装处理程序的成功情况,并采取行动(例如,如果提供了错误页面,则可能不希望
http.ResponseWriter
来实现这一点,也可以使用“中间件模式”:
游乐场:。您可以简单地包装,在包装的处理程序返回后,您可以将进一步的数据写入:
访问任何URL都将导致响应:
Hello World
生产环境中需要牢记的事项:
- 包装器还应检查响应代码或包装处理程序的成功情况,并采取行动(例如,如果提供了错误页面,则可能不希望继续执行额外的写入)
- 如果包装处理程序设置了
标题,则写入更多数据将使其无效(因为内容将大于标题中指示的内容)“Content length”
ResponseWriter
实现,该实现只写入缓冲区(例如),包装器将附加到此实现,并根据新的长度设置“Content length”
,然后将缓冲区的内容写入“real”输出
func myhandler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello"))
}
func wrapper(w http.ResponseWriter, r *http.Request) {
myhandler(w, r) // Call original
w.Write([]byte(" World")) // Write further data to output
}
func main() {
http.HandleFunc("/", wrapper)
http.ListenAndServe("", nil)
}
Hello World