为了账号安全,请及时绑定邮箱和手机立即绑定

Go中传递的参数

Go中传递的参数

Go
慕尼黑8549860 2021-04-25 17:19:07
假设我有一个方法 http.HandleFunctype HandlerFunc func(ResponseWriter, *Request)我想将它包装在另一个相同类型的方法周围,如下所示:func MyWrapper(res http.ResponseWriter, req *http.Request) {    // do stuff    AnotherMethod(res, req) // <- question refers to this line    // do more stuff}func AnotherMethod(res http.ResponseWriter, req *http.Request) {    // main logic}如果我做对了,当我打电话时,我将(的值)AnotherMethod(res, req)的副本传递res给AnotherMethod,这意味着该对象现在在内存中重复了。有没有一种方法可以将指针传递res到AnotherMethod,然后在其中取消引用,以便不复制的值res?还是我不明白某事?(使用指向res内部(的值)的指针AnotherMethod将不起作用,因为inhttp.ResponseWriter中所有方法的接收者都是值而不是指针)
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

http.ResponseWriter是接口类型。这意味着它既可以是引用类型,也可以是值类型,这取决于基础类型是什么以及实现接口的方式。

在这种情况下,res是unexported类型的实例*http.response。如您所见,它是一个指针类型,这意味着您可以传递它而无需创建整个结构的副本。

要查看所接收的接口值中包含什么实型,可以执行以下操作:fmt.Printf("%T\n", res)。它应该打印:*http.resonse



查看完整回答
反对 回复 2021-05-10
  • 1 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信