在 Gorilla Mux 中,預設情況下,處理程序僅接收 http.ResponseWriter 和 *http.Request。但是,在某些情況下,需要向處理程序傳遞其他參數,例如資料庫連接物件。
實現此目的的一種方法是定義一個自訂類型來保存附加資料並實作 http.HandlerFunc 介面。
type UserHandler struct { db *gorm.DB } func (h UserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { // here you can use db } // usage: db := createDB() users := UserHandler{db: db} router.HandleFunc("/users/{id}", users.ServeHTTP)
另一個選擇是使用閉包函數來包裝實際的處理程序並注入附加參數。
func showUserHandler(db *gorm.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // here you can use db } } // usage: db := createDB() router.HandleFunc("/users/{id}", showUserHandler(db))
在某些情況下,使用全域變數可能是可以接受的,特別是對於資料庫連線等共享資源。但是,謹慎使用它們並了解潛在的缺點非常重要。
var db *gorm.DB = createDB() func showUserHandler(w http.ResponseWriter, r *http.Request) { // here you can use db } // usage: router.HandleFunc("/users/{id}", showUserHandler)
以上是如何將附加參數傳遞給 Gorilla Mux 中的處理函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!