package main
import (
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){
w.Write([]byte("hello world"))
})
http.ListenAndServe(":8000", nil)
}
Run Code Online (Sandbox Code Playgroud)
如果我删除*in http.Request:
github.com/creating_web_app_go/main.go:8:不能在http.HandleFunc的参数中使用func文字(类型为func(http.ResponseWriter,http.Request))作为类型func(http.ResponseWriter,*http.Request)
我对Go和指针都很新.
所以问题是,为什么必须http.Request是指针而不是func literal?任何人都可以用最简单的方式解释这一点,也许可以参考源代码?
Rob*_*ier 10
因为它是一个大型结构.复制它会很昂贵.所以它是一个结构的指针,当结构很大时,它在Go中很常见.它也有一些状态,所以如果被复制它可能会令人困惑.成为一个真实的文字是没有意义的; 我不明白为什么那是一个选择.