Pemintas membenarkan memasukkan logik tersuai ke dalam aplikasi Go tanpa mengubah suai kod sedia ada. Ia boleh digunakan untuk pengesahan, pengelogan, pengendalian ralat, pemantauan prestasi, dsb. Mencipta pemintas memerlukan pelaksanaan antara muka Pengendali, yang mentakrifkan kaedah ServeHTTP() untuk mengendalikan permintaan HTTP dan kaedah Next() untuk menghantar kawalan. Contoh praktikal menunjukkan cara menggunakan pemintas pengelogan untuk mengelog laluan URL semua permintaan masuk, dan cara merantai berbilang pemintas (seperti pemintas pengesahan) bersama-sama untuk mencipta logik aplikasi yang kompleks.
Menguasai Pemintas di Golang
Pengenalan
Pemintas ialah mekanisme yang berkuasa dan fleksibel yang membolehkan kami membenamkan logik tersuai dalam aplikasi Golang tanpa perlu mengubah suai yang sedia ada. Ia boleh digunakan untuk pelbagai tujuan, termasuk pengesahan, pengelogan, pengendalian ralat dan pemantauan prestasi.
Buat pemintas
Untuk mencipta pemintas, kita perlu melaksanakan antara muka
Handler
接口。该接口定义了两个方法:
ServeHTTP(ResponseWriter, *Request)
:处理 HTTP 请求并生成响应。Next(ResponseWriter, *Request)
ServeHTTP(ResponseWriter, *Request)
: Memproses permintaan HTTP dan menjana respons.Seterusnya(ResponseWriter, *Permintaan)
: Hantar kawalan kepada pengendali atau pemintas seterusnya.package main import ( "fmt" "net/http" ) func main() { // 创建一个简单的日志拦截器 logger := func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Printf("收到请求:%s\n", r.URL.Path) next.ServeHTTP(w, r) }) } // 创建一个 HTTP 路由器并使用拦截器 mux := http.NewServeMux() mux.Handle("/", logger(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, world!") }))) // 启动 HTTP 服务器 http.ListenAndServe(":8080", mux) }
Menggunakan Berbilang Pemintas
Kami boleh merantai berbilang pemintas bersama-sama untuk mencipta logik aplikasi yang kompleks. Sebagai contoh, kami boleh mencipta pemintas pengesahan yang bertanggungjawab untuk memastikan bahawa hanya pengguna yang disahkan boleh mengakses titik akhir tertentu:// 身份验证拦截器 func auth(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // 检查请求头中是否存在身份验证令牌 if r.Header.Get("Authorization") == "" { http.Error(w, "未经授权", http.StatusUnauthorized) return } next.ServeHTTP(w, r) }) }
mux.Handle("/private", auth(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // 私有区域的逻辑 })))
Atas ialah kandungan terperinci Menguasai pemintas di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!