將參數傳遞給 Go 處理程序
在 Web 開發中,處理程序負責處理傳入的 HTTP 請求並回傳回應。預設情況下,流行的 Go 路由庫 Gorilla Mux 期望將處理程序定義為帶有兩個參數的函數:http.ResponseWriter 和 *http.Request。
但是,您可能會遇到需要傳遞處理程序的附加參數,例如資料庫物件或其他依賴項。全域變數可以是一個方便的解決方案,但它們也可能導致潛在的問題。
全域變數的替代品
為了避免使用全域變數將參數傳遞給處理程序,有幾種解決方法可用:
1.基於結構的處理程序
您可以定義嵌入資料庫物件並包含處理程序函數的自訂結構。透過建立此結構的實例,您可以將適當的實例傳遞給每個處理程序。
type Users struct { db *gorm.DB } func (users *Users) showHandler(w http.ResponseWriter, r *http.Request) { // Access the database object using users.db } // Create an instance of the Users struct users := &Users{db: createDB()} // Register the handler with Gorilla Mux, passing the Users instance router.HandleFunc("/users/{id}", users.showHandler).Methods("GET")
2.包裝函數
您可以建立一個包裝函數,它接受附加參數並呼叫實際的處理程序:
// Create a database object db := createDB() // Define a wrapper function that takes the additional argument func showUserHandlerWrapper(w http.ResponseWriter, r *http.Request, db *gorm.DB) { showUserHandler(w, r, db) } // Register the wrapper function with Gorilla Mux router.HandleFunc("/users/{id}", showUserHandlerWrapper).Methods("GET")
兩種方法都提供了將參數傳遞給Go 處理程序的方法,同時避免全域變數的使用。
以上是如何在不使用全域變數的情況下將參數傳遞給 Go 處理程序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!