假设我有一个中心方法,它将一个特定的头添加到http.ResponseWriter。我不想使用HandleFunc包装器。
我想知道,我是否通过引用发送了ResponseWriter。那么,什么是正确的:
addHeaders(&w)
或
addHeaders(w)
提出不同的问题:
func addHeaders(w *http.ResponseWriter) {...}
或
func addHeaders(w http.ResponseWriter) {...}
根据我的理解,我会说第一个版本是正确的,因为我不想创建ResponseWriter的副本。但我没有看到任何代码,其中ResponseWriter通过引用传递,并想知道为什么。
谢谢!
答案 0 :(得分:16)
http.ResponseWriter
是一个界面。您希望传递其值,因为它在内部包含指向实际Writer的指针。你几乎不想要一个指向接口的指针。
查看标准处理程序func的签名是什么:
func(http.ResponseWriter, *http.Request)
请注意,ResponseWriter不是指针。