Bagaimana untuk menyelesaikan penghalaan permintaan dan masalah penapisan permintaan permintaan rangkaian serentak dalam bahasa Go?
Dalam bahasa Go, permintaan rangkaian serentak boleh dilaksanakan dengan mudah dengan menggunakan goroutine dan saluran. Walau bagaimanapun, dalam aplikasi praktikal, kami sering menghadapi masalah dengan penghalaan permintaan dan penapisan permintaan, iaitu, permintaan yang berbeza perlu memanggil fungsi pemprosesan yang berbeza, dan penapisan permintaan tertentu diperlukan.
Terdapat banyak perpustakaan pihak ketiga dalam bahasa Go yang boleh membantu kami melengkapkan penghalaan permintaan dan fungsi penapisan permintaan, seperti gorila/mux, gin, go-chi, dsb. Di bawah ini kami menggunakan gorila/mux sebagai contoh untuk memperkenalkan cara menyelesaikan dua masalah ini dalam bahasa Go.
Pertama, kita perlu menggunakan perpustakaan gorila/mux untuk mencipta penghala (Penghala), dan kemudian menentukan peraturan penghalaan yang berbeza. Sebagai contoh, kita boleh mentakrifkan peraturan penghalaan sebagai/users/{id}
untuk memproses permintaan bermula dengan/users/
, di mana{id}
ialah pembolehubah./users/{id}
,用来处理以/users/
开头的请求,其中{id}
是一个变量。
router := mux.NewRouter() router.HandleFunc("/users/{id}", handleUserRequest)
上述代码创建了一个路由器,并定义了一个路由规则为/users/{id}
,路由规则会自动将请求的URL中的id
参数传递给handleUserRequest
函数进行处理。
接下来,我们需要定义处理函数handleUserRequest
。在这个函数中,我们可以获取请求的参数、处理请求、返回结果等。
func handleUserRequest(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) id := vars["id"] // 根据id查询用户信息 user := getUserInfo(id) // 返回结果 if user != nil { json.NewEncoder(w).Encode(user) } else { http.NotFound(w, r) } }
在上述代码中,我们使用mux.Vars(r)
函数可以获取到请求的URL中的id参数。然后我们可以根据id查询用户信息,并将结果返回给客户端。
除了请求路由之外,我们可能还需要对请求进行一定的过滤,比如权限验证、参数检查等。gorilla/mux库提供了中间件(Middleware)的功能,可以帮助我们实现请求过滤。
func authMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // 进行权限验证 if !checkAuth(w, r) { return } // 调用下一个中间件或处理函数 next.ServeHTTP(w, r) }) }
上述代码定义了一个名为authMiddleware
的中间件函数,用来进行权限验证。在中间件函数中,我们可以进行一些业务逻辑的判断,比如验证Token是否有效。如果验证不通过,可以直接返回,否则可以调用下一个中间件或处理函数。
使用中间件函数可以很方便地对请求进行过滤,我们可以在路由器中使用Use
方法进行注册。
router := mux.NewRouter() router.Use(authMiddleware)
在上述代码中,我们在路由器中使用Use
方法注册了authMiddleware
rrreee
/users/{id}
Peraturan penghalaan akan menukar parameter
id
secara automatik dalam URL yang diminta. Dihantar kepada fungsi
handleUserRequest
untuk diproses.
Seterusnya, kita perlu mentakrifkan fungsi pengendali
handleUserRequest
. Dalam fungsi ini, kita boleh mendapatkan parameter permintaan, memproses permintaan, mengembalikan hasil, dsb. rrreeeDalam kod di atas, kami menggunakan fungsi
mux.Vars(r)
untuk mendapatkan parameter id dalam URL yang diminta. Kemudian kita boleh menanyakan maklumat pengguna berdasarkan id dan mengembalikan hasilnya kepada pelanggan. Selain penghalaan permintaan, kami juga mungkin perlu melakukan penapisan tertentu pada permintaan, seperti pengesahan kebenaran, semakan parameter, dsb. Pustaka gorila/mux menyediakan fungsi perisian tengah yang boleh membantu kami melaksanakan penapisan permintaan. rrreeeKod di atas mentakrifkan fungsi middleware bernama
authMiddleware
untuk pengesahan kebenaran. Dalam fungsi middleware, kita boleh membuat beberapa pertimbangan logik perniagaan, seperti mengesahkan sama ada Token itu sah. Jika pengesahan gagal, anda boleh kembali secara langsung, jika tidak, anda boleh memanggil middleware atau fungsi pemprosesan seterusnya. Menggunakan fungsi middleware boleh menapis permintaan dengan mudah Kita boleh menggunakan kaedah
Gunakan
untuk mendaftar dalam penghala. rrreeeDalam kod di atas, kami menggunakan kaedah
Use
untuk mendaftarkan fungsi middleware
authMiddleware
dalam penghala, supaya semua permintaan akan terlebih dahulu melalui fungsi middleware untuk mendapatkan kebenaran pengesahan , dan kemudian diserahkan kepada peraturan penghalaan yang sepadan untuk diproses. Melalui kod contoh di atas, kita dapat melihat cara menyelesaikan penghalaan permintaan dan masalah penapisan permintaan permintaan rangkaian serentak dalam bahasa Go. Peraturan penghalaan dan fungsi middleware boleh ditakrifkan dengan mudah menggunakan perpustakaan gorila/mux untuk mencapai pemprosesan permintaan rangkaian serentak yang cekap. Sudah tentu, selain perpustakaan gorila/mux, terdapat banyak lagi perpustakaan pihak ketiga yang sangat baik yang boleh digunakan untuk menyelesaikan masalah ini Pembangun boleh memilih perpustakaan yang sesuai untuk digunakan mengikut keperluan mereka sendiri.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah penghalaan permintaan dan penapisan permintaan untuk permintaan rangkaian serentak dalam bahasa Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!