通过值或引用传递http.ResponseWriter?

时间:2014-03-03 21:10:51

标签: go

假设我有一个中心方法,它将一个特定的头添加到http.ResponseWriter。我不想使用HandleFunc包装器。

我想知道,我是否通过引用发送了ResponseWriter。那么,什么是正确的:

addHeaders(&w)

addHeaders(w)

提出不同的问题:

func addHeaders(w *http.ResponseWriter) {...}

func addHeaders(w http.ResponseWriter) {...}

根据我的理解,我会说第一个版本是正确的,因为我不想创建ResponseWriter的副本。但我没有看到任何代码,其中ResponseWriter通过引用传递,并想知道为什么。

谢谢!

1 个答案:

答案 0 :(得分:16)

http.ResponseWriter是一个界面。您希望传递其值,因为它在内部包含指向实际Writer的指针。你几乎不想要一个指向接口的指针。

查看标准处理程序func的签名是什么:

func(http.ResponseWriter, *http.Request)

请注意,ResponseWriter不是指针。