首頁  >  文章  >  後端開發  >  如何在不使用全域變數的情況下將參數傳遞給 Go 處理程序?

如何在不使用全域變數的情況下將參數傳遞給 Go 處理程序?

Patricia Arquette
Patricia Arquette原創
2024-11-12 17:01:021035瀏覽

How Can I Pass Arguments to Go Handlers Without Using Global Variables?

將參數傳遞給 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中文網其他相關文章!

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