Golang ialah bahasa pengaturcaraan yang cekap dan mempunyai kaedah tersendiri dalam melaksanakan penghalaan. Artikel ini akan memperkenalkan kaedah pelaksanaan penghalaan dinamik Golang.
1. Pengenalan kepada penghalaan Golang
Di Golang, kita boleh menggunakan mux dalam pakej net/http untuk melaksanakan penghalaan. mux ialah penghala yang memajukan permintaan kepada pengendali yang sesuai berdasarkan laluan URL permintaan dan kaedah HTTP. mux menggunakan jadual penghalaan untuk memetakan URI permintaan kepada pengendali.
Penghala Golang perlu memenuhi ciri berikut:
2. Kaedah pelaksanaan penghalaan dinamik
Golang menggunakan fungsi pemproses untuk memproses permintaan, fungsi pemproses Merupakan fungsi dengan http.ResponseWriter dan http.Request parameter. http.ResponseWriter ialah antara muka untuk menulis jawapan http.Request mengandungi semua maklumat permintaan HTTP.
Penghalaan dinamik menggunakan pembolehubah sebagai sebahagian daripada laluan URL dan kami boleh mengakses pembolehubah ini dalam fungsi pengendali.
Kita boleh menggunakan fungsi mux.Vars untuk mendapatkan pembolehubah pada URL. Contohnya:
func main() { r := mux.NewRouter() r.HandleFunc("/{category}/{id:[0-9]+}", ProductHandler) http.ListenAndServe(":8080", r) } func ProductHandler(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) category := vars["category"] id := vars["id"] fmt.Fprintf(w, "Product category:%v id:%v", category, id) }
Dalam contoh ini, kami mengehadkan parameter id kepada hanya jenis angka dengan menggunakan ungkapan biasa. Gunakan {category} dan {id:[0-9]+} sebagai parameter laluan penghalaan.
Di Golang, kita boleh menggunakan fungsi http.NotFound untuk mengendalikan 404 ralat. Kita boleh menghantar fungsi NotFound kepada mux.NotFoundHandler() untuk menyesuaikan fungsi pengendalian ralat 404, contohnya:
r := mux.NewRouter() r.NotFoundHandler = http.HandlerFunc(Custom404Handler)
Dalam contoh di atas, kami menggunakan fungsi Custom404Handler sebagai fungsi pengendalian ralat 404 tersuai.
Di Golang, kita boleh menggunakan fungsi http.Redirect untuk melaksanakan fungsi ubah hala. Contohnya:
func main() { r := mux.NewRouter() r.HandleFunc("/old-route", func(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, "/new-route", 301) }) r.HandleFunc("/new-route", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "New Route") }) http.ListenAndServe(":8080", r) }
Dalam contoh di atas, kami menggunakan fungsi http.Redirect untuk mengubah hala laluan /lama-laluan ke laluan /new-route dan menggunakan kod status 301 untuk menunjukkan ubah hala kekal .
3. Kaedah pelaksanaan middleware
Di Golang, kami menggunakan fungsi jenis HandlerFunc sebagai middleware, yang mempunyai parameter http.ResponseWriter dan *http.Request, dan juga menerima parameter http.HandlerFunc seterusnya. Parameter seterusnya adalah serupa dengan nod seterusnya dalam senarai terpaut.
type Middleware func(http.HandlerFunc) http.HandlerFunc func LoggerMiddleware(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { log.Printf("Logging middleware: %s", r.RequestURI) next(w, r) } }
Dalam contoh di atas, fungsi LoggerMiddleware ialah perisian tengah yang merekodkan permintaan HTTP. Parameter seterusnya ialah nod seterusnya dalam senarai terpaut, yang terus memproses permintaan.
4. Ringkasan
Pakej mux Golang ialah penghala yang sangat berkuasa yang menyokong penghalaan statik, penghalaan dinamik dan perisian tengah. Dengan ciri ini, kami mempunyai lebih kawalan ke atas permintaan HTTP dan boleh mengurus penghalaan dan pengendalian permintaan untuk aplikasi web dengan lebih baik.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan penghalaan dinamik golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!