Menggunakan Ungkapan Biasa dalam Pengendalian URL di Golang
Di Golang, kaedah http.HandleFunc() membenarkan anda mendaftarkan corak URL untuk HTTP pengendalian permintaan. Walau bagaimanapun, kaedah ini tidak menyokong penggunaan ungkapan biasa untuk padanan corak. Ini menimbulkan persoalan tentang cara menggunakan ungkapan biasa untuk menentukan pemprosesan fungsi yang sesuai berdasarkan corak URL.
Pustaka standard http.HandleFunc() tidak menyokong ungkapan biasa untuk pemadanan URL. Sebaliknya, ia hanya boleh memadankan laluan tetap, berakar (cth., "/favicon.ico") atau subpokok berakar (cth., "/images/"). Walaupun corak yang lebih panjang diutamakan daripada yang lebih pendek, pilihannya adalah terhad.
Untuk mengatasi pengehadan ini dan menggunakan ungkapan biasa untuk corak URL, anda boleh mengatasi corak URL akar dengan corak yang lebih generik. Di dalam fungsi pengendali, anda kemudiannya boleh melakukan pemadanan dan penghalaan ungkapan biasa selanjutnya berdasarkan laluan URL tertentu.
Menggunakan Regexp untuk Menghalakan Permintaan
Kod berikut menunjukkan cara untuk menggunakan ungkapan biasa untuk penghalaan URL:
import ( "fmt" "net/http" "regexp" ) func main() { http.HandleFunc("/", route) http.ListenAndServe(":8080", nil) } var rNum = regexp.MustCompile(`\d`) // Has digit(s) var rAbc = regexp.MustCompile(`abc`) // Contains "abc" func route(w http.ResponseWriter, r *http.Request) { switch { case rNum.MatchString(r.URL.Path): digits(w, r) case rAbc.MatchString(r.URL.Path): abc(w, r) default: w.Write([]byte("Unknown Pattern")) } } func digits(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Has digits")) } func abc(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Has abc")) }
Dalam contoh ini, fungsi utama mendaftarkan URL akar ("/") sebagai corak kad bebas. Di dalam fungsi route(), ia menggunakan ungkapan biasa (rNum dan rAbc) untuk memadankan dua corak URL tertentu: laluan dengan sekurang-kurangnya satu digit (cth., "/123") dan laluan yang mengandungi rentetan "abc" (cth., "/ abcde"). Jika permintaan sepadan dengan mana-mana corak, fungsi yang sesuai (cth., digit() atau abc()) dilaksanakan. Jika tidak, mesej lalai dipaparkan.
Pendekatan Alternatif
Selain pendekatan di atas, anda juga boleh menggunakan perpustakaan luaran seperti Gorilla MUX, yang menyediakan lebih fleksibel mekanisme penghalaan dengan sokongan untuk ekspresi biasa.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Ungkapan Biasa untuk Penghalaan URL dalam `http.HandleFunc()` Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!