首頁 >後端開發 >Golang >如何將附加參數傳遞給 Gorilla Mux 中的處理函數?

如何將附加參數傳遞給 Gorilla Mux 中的處理函數?

Susan Sarandon
Susan Sarandon原創
2024-11-17 15:28:02889瀏覽

How to Pass Additional Arguments to Handler Functions in Gorilla Mux?

使用 Gorilla Mux 處理處理程序參數

在 Gorilla Mux 中,預設情況下,處理程序僅接收 http.ResponseWriter 和 *http.Request。但是,在某些情況下,需要向處理程序傳遞其他參數,例如資料庫連接物件。

方法 1:處理程序作為自訂類型的方法

實現此目的的一種方法是定義一個自訂類型來保存附加資料並實作 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)

方法 2:閉包函數

另一個選擇是使用閉包函數來包裝實際的處理程序並注入附加參數。

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))

方法 3:全域變數

在某些情況下,使用全域變數可能是可以接受的,特別是對於資料庫連線等共享資源。但是,謹慎使用它們並了解潛在的缺點非常重要。

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn