Go中传递的参数

假设我有一个方法 http.HandleFunc


type 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中所有方法的接收者都是值而不是指针)


慕尼黑8549860
浏览 192回答 1
1回答

慕莱坞森

http.ResponseWriter是接口类型。这意味着它既可以是引用类型,也可以是值类型,这取决于基础类型是什么以及实现接口的方式。在这种情况下,res是unexported类型的实例*http.response。如您所见,它是一个指针类型,这意味着您可以传递它而无需创建整个结构的副本。要查看所接收的接口值中包含什么实型,可以执行以下操作:fmt.Printf("%T\n", res)。它应该打印:*http.resonse。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go