在下面的示例中,我已嵌入http.ResponseWriter到我自己的名为Response. 我还添加了一个名为Status. 为什么我不能从我的root处理程序函数内部访问该字段?
当我打印出w根处理程序函数中的类型时main.Response,它说它的类型看起来是正确的,当我打印出结构的值时,我可以看到它Status在那里。为什么我不能通过 go 访问w.Status?
这是标准输出的内容:
main.Response
{ResponseWriter:0xc2080440a0 Status:0}
代码:
package main
import (
"fmt"
"reflect"
"net/http"
)
type Response struct {
http.ResponseWriter
Status int
}
func (r Response) WriteHeader(n int) {
r.Status = n
r.ResponseWriter.WriteHeader(n)
}
func middleware(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
resp := Response{ResponseWriter: w}
h.ServeHTTP(resp, r)
})
}
func root(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("root"))
fmt.Println(reflect.TypeOf(w))
fmt.Printf("%+v\n", w)
fmt.Println(w.Status) // <--- This causes an error.
}
func main() {
http.Handle("/", middleware(http.HandlerFunc(root)))
http.ListenAndServe(":8000", nil)
}
慕侠2389804
相关分类