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

标签 go

假设我有一个向 http.ResponseWriter 添加特定 header 的中心方法。我不想使用 HandleFunc 包装器。

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

addHeaders(&w)

addHeaders(w)

问的不同:

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

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

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

谢谢!

最佳答案

http.ResponseWriter 是一个接口(interface)。你想传递它的值,因为它内部包含一个指向实际 Writer 的指针。您几乎从不需要指向接口(interface)的指针。

看看标准处理函数的签名是什么:

func(http.ResponseWriter, *http.Request)

请注意 ResponseWriter 不是指针。

关于go - 通过值或引用传递 http.ResponseWriter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22157514/

相关文章:

go - scanfl 声明变量超出功能

go - fasthttp + fasthttprouter,尝试写中间件

session - go-swagger 不调用我的标题检查

go - 不能在 websocket.Message.Send 的参数中使用 ccc(int 类型)作为 *websocket.Conn 类型

loops - 完成 2 个 goroutine 后删除文件

go - 在 Paypal 中创建客户

unit-testing - 使用gocheck测试go(golang)代码,suite功能如何使用?

go - 将方法与返回 "self"的结构相关联

struct - 在已经类型化的结构上进行 Go 结构类型

go - 我如何将 []string 作为 ...interface{} 参数传递