在使用net/http包时,创建处理器函数,需要传入http.ResponseWriter接口,但是对ResponseWriter接口的应用一直没搞明白
代码如下:
func process(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("tmp.html")
t.Execute(w, "hello world")
}
func main() {
server := http.Server{
Addr: "127.0.0.1:8080",
}
http.HandleFunc("/process", process)
server.ListenAndServe()
}
Template的Execute方法定义如下:
func (t *Template) Execute(wr io.Writer, data interface{}) error {
if err := t.escape(); err != nil {
return err
}
return t.text.Execute(wr, data)
}
Execute接受io.Writer是接口类型,ResponseWriter也是接口类型,他们怎么连接起来的,ResponseWriter具体是怎么工作的?
请大家帮忙指点下,谢谢!!!
Write(p []byte) (n int, err error)
方法即可那只要实现了http.ResponseWriter, 就必然会实现io.Writer 接口。
所以,ResponseWriter 的实现,必然是一个 io.Writer 的实现,那也显而易见的可以使用Execute 方法了。
ResponseWriter 的接口抽象,其实有很多个实现的,例如:
如果希望详细了解下执行过程,可以通过打断点的方式抛下。