Meluluskan Argumen kepada Go Handlers
Dalam pembangunan web, pengendali bertanggungjawab untuk memproses permintaan HTTP yang masuk dan membalas respons. Secara lalai, Gorilla Mux, perpustakaan penghalaan Go yang popular, menjangkakan pengendali ditakrifkan sebagai fungsi yang mengambil dua parameter: http.ResponseWriter dan *http.Request.
Walau bagaimanapun, anda mungkin menghadapi senario di mana anda perlu lulus hujah tambahan kepada pengendali anda, seperti objek pangkalan data atau kebergantungan lain. Pembolehubah global boleh menjadi penyelesaian yang mudah, tetapi ia juga boleh membawa kepada isu yang berpotensi.
Alternatif kepada Pembolehubah Global
Untuk mengelak daripada menggunakan pembolehubah global untuk menghantar hujah kepada pengendali, beberapa penyelesaian tersedia:
1. Pengendali Berasaskan Struktur
Anda boleh menentukan struct tersuai yang membenamkan objek pangkalan data anda dan mengandungi fungsi pengendali. Dengan mencipta contoh struct ini, anda kemudiannya boleh menghantar contoh yang sesuai kepada setiap pengendali.
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. Fungsi Pembungkus
Anda boleh mencipta fungsi pembungkus yang menerima hujah tambahan dan memanggil pengendali sebenar:
// 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")
Kedua-dua pendekatan menyediakan cara untuk menyampaikan hujah kepada pengendali Go anda sambil mengelak penggunaan pembolehubah global.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meluluskan Hujah kepada Pengendali Tanpa Menggunakan Pembolehubah Global?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!