Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Meluluskan Hujah Tambahan kepada Fungsi Pengendali dalam Gorilla Mux?

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

Susan Sarandon
Susan Sarandonasal
2024-11-17 15:28:02890semak imbas

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)

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

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)

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!

Kenyataan:
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