Golang tidak menyediakan pemintas terbina dalam, tetapi anda boleh menggunakan ciri bahasa seperti fungsi, antara muka dan struktur untuk mencapai fungsi yang serupa Berikut adalah kaedah pelaksanaan pemintas yang biasa digunakan: 1. Pemintas berfungsi, sebelum permintaan sampai kepada pengendali. dan kemudian memanggil fungsi untuk melaksanakan pemintas; 2. Pemintas antara muka, yang melaksanakan pemintas dengan mentakrifkan antara muka dan melaksanakan antara muka sebelum dan selepas pengendali sasaran Kaedah ini boleh menjadikan pemintas lebih fleksibel dan boleh digunakan dalam Melaksanakan logik pemintas yang berbeza pada antara muka yang berbeza.
Persekitaran pengendalian artikel ini: sistem Windows 10, versi go1.20, komputer dell g3.
Pemintas ialah corak pengaturcaraan biasa, dan terdapat juga mekanisme yang sepadan dalam bahasa pengaturcaraan Go untuk melaksanakan pemintas. Dalam artikel ini, kita akan meneroka konsep pemintas di Golang dan cara menggunakan serta melaksanakannya.
Apakah pemintas?
Pemintas ialah perisian tengah yang digunakan untuk memintas permintaan dan respons, membolehkan kami melakukan operasi tertentu sebelum permintaan sampai kepada pengendali sasaran dan sebelum respons dihantar kepada pelanggan. Pemintas sering digunakan untuk mengendalikan logik biasa seperti pengelogan, pengesahan, pengendalian ralat, dll., dengan itu mengurangkan pertindihan kod.
Pemintas dalam Go
Di Golang, tiada mekanisme pemintas khusus, tetapi kami boleh menggunakan ciri bahasa seperti fungsi, antara muka dan struktur untuk mencapai fungsi yang serupa. Berikut ialah beberapa corak pemintas biasa yang dilaksanakan dalam Go.
1. Pemintas Berfungsi:
Melaksanakan pemintas dengan memanggil fungsi sebelum dan selepas permintaan sampai kepada pengendali. Kita boleh menentukan jenis fungsi untuk mewakili pemintas dan kemudian menyerahkannya kepada fungsi konkrit sebagai parameter pengendali.
type InterceptorFunc func http.Handler http.Handler
Contoh kod:
func Logger(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { log.Printf("[%s] %s", r.Method, r.URL.Path) next.ServeHTTP(w, r) }) }
2. Pemintas antara muka:
Pemintas dilaksanakan dengan mentakrifkan antara muka dan melaksanakan antara muka sebelum dan selepas pengendali sasaran. Pendekatan ini boleh menjadikan pemintas lebih fleksibel dan boleh melaksanakan logik pemintas yang berbeza pada antara muka yang berbeza.
type Interceptor interface { Before(next http.Handler) http.Handler After(next http.Handler) http.Handler }
Contoh Kod:
type LoggerInterceptor struct{} func (l *LoggerInterceptor) Before(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { log.Printf("[%s] %s", r.Method, r.URL.Path) next.ServeHTTP(w, r) }) } func (l *LoggerInterceptor) After(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { next.ServeHTTP(w, r) log.Printf("Response sent.") }) }
Menggunakan Pemintas
Sekarang kita telah melihat cara untuk melaksanakan pemintas di Golang, mari lihat cara menggunakannya. Katakan kami mempunyai pelayan HTTP dan ingin melog permintaan sebelum memprosesnya. Kita boleh menggunakan fungsi Logger atau LoggerInterceptor yang ditakrifkan dalam kod contoh sebelumnya untuk melaksanakan pemintas.
func main() { // 创建一个HTTP服务器实例 server := http.NewServeMux() // 注册路由处理程序 server.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) fmt.Fprintf(w, "Hello, World!") }) // 使用拦截器包装处理程序 serverWithInterceptor := Logger(server) // 启动服务器 log.Fatal(http.ListenAndServe(":8080", serverWithInterceptor)) }
Kelebihan dan senario pemintas yang berkenaan
Pemintas menyediakan cara modular yang boleh digunakan semula untuk mengendalikan logik biasa. Mereka membenarkan kami memisahkan fungsi biasa daripada pengendali tertentu dan menggunakannya pada berbilang pengendali, menjadikan kod itu boleh diselenggara dan diperluaskan. Pemintas sesuai untuk pelbagai senario, termasuk pengesahan, kebenaran, caching, pengelogan, pengendalian ralat, dsb.
Kesimpulan:
Walaupun Golang sendiri tidak menyediakan mekanisme pemintas terbina dalam, kami boleh menggunakan ciri bahasa seperti fungsi, antara muka dan struktur untuk mencapai fungsi yang serupa. Pemintas fungsian dan antara muka ialah cara biasa untuk melaksanakan corak pemintas. Dengan menggunakan pemintas, kami boleh melakukan tindakan tersuai sebelum permintaan mencapai pengendali sasaran dan sebelum respons dihantar kepada pelanggan, dan meningkatkan kebolehgunaan semula dan kebolehselenggaraan kod.
Atas ialah kandungan terperinci Adakah golang mempunyai pemintas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!