Go HTTP 處理程序中ResponseWriter 和Request 的區別
在Go HTTP 處理程序中,ResponseWriter 被定義為值,而Re>在Go HTTP 處理程序中,ResponseWriter 則是作為指針傳遞。為了理解這種區別,讓我們檢查一下底層類型。
ResponseWriter 是一個接口,定義為:
type ResponseWriter interface { ... }
這意味著 ResponseWriter 只是任何具體類型都可以實現的契約。相反,Request 被定義為結構體:
type Request struct { ... }
由於 Request 是具體類型,因此必須使用指標將其作為引用傳遞,以允許對其內部狀態進行修改。這與 ResponseWriter 形成對比,ResponseWriter 是一個接口,是按值傳遞的。
GAE 中使用的 ResponseWriter 的具體實作實際上是一個指向未導出的 http.response 類型的指針,給人的感覺是透過一個值。然而,如上所示,ResponseWriter 的基本定義是一個接口,它不能透過值傳遞。
最終,將 ResponseWriter 作為值並將 Request 作為指標的決定允許完全分離關注點。 ResponseWriter 介面確保反應處理的一致性和穩定性,而指向 Request 結構的指標可以直接修改其內部狀態。
以上是為什麼在 Go HTTP 處理程序中 `ResponseWriter` 透過值傳遞,而 `Request` 透過指標傳遞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!