在 Go 中,http.Request 類型是一個大型結構體,包含有關 HTTP 請求的各種資訊。為了有效地處理 HTTP 請求,Go 使用指標來避免複製大型資料結構的開銷。
<code class="go">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) }</code>
如果刪除 *http.Request 中的星號 (*),則會遇到錯誤,因為 func文字需要一個指向 http.Request 類型的指標。
<code class="go"> <p>github.com/creating_web_app_go/main.go:8: cannot use func literal (type func(http.ResponseWriter, http.Request)) as type func(http.ResponseWriter, *http.Request) in argument to http.HandleFunc</p></code>
Go 中使用指標傳遞對物件的引用,而不是物件本身的副本。這更有效,特別是像 http.Request 這樣的大型結構。另外,http.Request 中包含了狀態訊息,例如 HTTP headers 和 request body,如果複製的話會很混亂。
因此,http.Request 參數必須是一個指針,以確保 HTTP 請求的高效處理並維護其包含的狀態資訊的完整性。
以上是為什麼 `http.Request` 參數需要是 Go 中的指標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!