为什么在http.HandleFunc的回调中使用指针

为什么在http.HandleFunc的回调中使用指针,http,go,Http,Go,我正在努力学习网络编程。我遇到了http.HandleFunc函数,我可以为它提供一个回调来处理配置给它的web请求 我的小程序如下所示 主程序包 进口( “fmt” “日志” “net/http” “同步” ) 变量计数整数 var mu sync.Mutex func main(){ var p点 http.HandleFunc(“/”,handler) log.Fatal(http.ListenAndServe(“localhost:8080”,nil)) } func处理程序(w htt

我正在努力学习网络编程。我遇到了
http.HandleFunc
函数,我可以为它提供一个回调来处理配置给它的web请求

我的小程序如下所示

主程序包
进口(
“fmt”
“日志”
“net/http”
“同步”
)
变量计数整数
var mu sync.Mutex
func main(){
var p点
http.HandleFunc(“/”,handler)
log.Fatal(http.ListenAndServe(“localhost:8080”,nil))
}
func处理程序(w http.ResponseWriter,r*http.Request){
fmt.Fprintf(w,“URL.Path=:%q\n”,r.URL.Path)
}

为什么
处理程序中的*http.Request
方法是指针。我知道这就是设计它的方式。但我想知道为什么他们要求使用指针而不是常规值。

因为指针只包含引用,我们可以使用它而不是创建请求的新副本。这样,处理请求结构的每个人都可以看到更改

对于结构和接口之间的差异也有很好的解释。

从文档a
http.Request
是一个相当大且复杂的结构:

因此,为了提高效率,指针优于按值复制非指针


同时,传递指针允许对结构的任何修改保持不变,例如..

1
http.HandleFunc
是一种类型,而不是函数。2.它不接受回调。回调在Go中非常罕见。我认为这实际上是回调模式。谢谢你澄清这一点。:)