我正在通过为 GAE 编写应用程序来学习 Go,这是处理函数的签名:
func handle(w http.ResponseWriter, r *http.Request) {}
我在这里是指针新手,那么为什么 Request
对象是指针,而 ResponseWriter
不是?有没有必要这样,还是只是为了使某种基于指针的高级代码成为可能?
最佳答案
你得到的 w
是一个指向非导出类型 http.response
的指针,但由于 ResponseWriter
是一个接口(interface),它是不可见的.
来自 server.go :
type ResponseWriter interface {
...
}
另一方面,r
是指向具体结构的指针,因此需要显式传递引用。
来自 request.go :
type Request struct {
...
}
关于pointers - 在 Go HTTP 处理程序中,为什么 ResponseWriter 是一个值,而 Request 是一个指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13255907/