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) }
如果我删除*in http.Request:
*
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?谁能以最简单的方式解释这一点,也许还会引用源代码?
func literal
因为它是一个大结构。复制它会很昂贵。因此,它是指向结构的指针,当结构很大时,这在Go中很常见。它还具有某种状态,因此如果将其复制,可能会造成混淆。成为一个有趣的字面意义是没有意义的。我不明白为什么这是一个选择。