Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Meluluskan Hujah kepada Pengendali Tanpa Menggunakan Pembolehubah Global?

Bagaimanakah Saya Boleh Meluluskan Hujah kepada Pengendali Tanpa Menggunakan Pembolehubah Global?

Patricia Arquette
Patricia Arquetteasal
2024-11-12 17:01:021061semak imbas

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

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!

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