Bagaimana untuk Meluluskan Hujah Tambahan kepada Fungsi Pengendali dalam Gorilla Mux?

Susan Sarandon
Lepaskan: 2024-11-17 15:28:02
asal
829 orang telah melayarinya

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

Mengendalikan Argumen Pengendali dengan Gorilla Mux

Dalam Gorilla Mux, secara lalai, pengendali hanya menerima http.ResponseWriter dan *http.Request. Walau bagaimanapun, terdapat senario di mana menghantar argumen tambahan kepada pengendali adalah perlu, seperti objek sambungan pangkalan data.

Pendekatan 1: Pengendali sebagai Kaedah Jenis Tersuai

Satu cara untuk mencapainya ialah untuk menentukan jenis tersuai yang menyimpan data tambahan dan melaksanakan http.HandlerFunc antara muka.

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)
Salin selepas log masuk

Pendekatan 2: Fungsi Penutupan

Pilihan lain ialah menggunakan fungsi penutupan untuk membalut pengendali sebenar dan menyuntik hujah tambahan.

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))
Salin selepas log masuk

Pendekatan 3: Pembolehubah Global

Dalam senario tertentu, menggunakan pembolehubah global mungkin boleh diterima, terutamanya untuk sumber yang dikongsi seperti sambungan pangkalan data. Walau bagaimanapun, adalah penting untuk menggunakannya dengan berhati-hati dan memahami potensi kelemahan.

var db *gorm.DB = createDB()

func showUserHandler(w http.ResponseWriter, r *http.Request) {
    // here you can use db
}

// usage:
router.HandleFunc("/users/{id}", showUserHandler)
Salin selepas log masuk

Petua

  • Secara amnya tidak disyorkan untuk menggunakan pembolehubah global untuk objek pangkalan data, kerana ia boleh membawa kepada isu konkurensi.
  • Pendekatan terbaik bergantung pada keperluan khusus anda.
  • Untuk satu objek pangkalan data, fungsi penutupan atau pendekatan kaedah pengendali adalah lebih sesuai.
  • Untuk berbilang keadaan atau kebergantungan yang lebih kompleks, pertimbangkan untuk mencipta jenis konteks tersuai yang boleh dihantar melalui pengendali.

Atas ialah kandungan terperinci Bagaimana untuk Meluluskan Hujah Tambahan kepada Fungsi Pengendali dalam Gorilla Mux?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan