Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pemintas Golang: sepintas lalu

Pemintas Golang: sepintas lalu

WBOY
WBOYasal
2024-04-07 21:24:02966semak imbas

Ikhtisar: Go interceptor ialah mekanisme yang mengendalikan logik pra dan pasca fungsi yang dilaksanakan melalui perisian perantara. Prinsip: Pemintas dihantar ke fungsi sebagai parameter, dan logik sebelum dan selepas fungsi itu dilaksanakan. Pertempuran Praktikal: Menunjukkan penggunaan pemintas dengan mencipta pemintas yang merekodkan masa permintaan dan mengesahkan parameter permintaan, dan memautkannya kepada pengendali HTTP.

Golang 拦截器: 一览无余

Go Interceptor: Sekilas Pandang

Pengenalan

Pemintas ialah mekanisme yang melakukan beberapa pemprosesan sebelum dan selepas sesuatu fungsi dilaksanakan. Di Golang, pemintas boleh dilaksanakan menggunakan perisian tengah.

Prinsip

Pemintas berfungsi dengan melepasi diri mereka sendiri sebagai parameter kepada fungsi yang akan dipintas. Apabila fungsi dipanggil, pemintas akan melaksanakan logiknya sebelum dan selepas fungsi itu dilaksanakan.

Kes praktikal

Kami mencipta pelayan HTTP mudah untuk menunjukkan cara menggunakan pemintas:

package main

import (
    "log"
    "net/http"
)

func main() {
    // 创建一个记录请求时间的拦截器
    timeInterceptor := func(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            start := time.Now()
            defer func() { log.Printf("请求处理耗时:%fs", time.Since(start).Seconds()) }()
            next.ServeHTTP(w, r)
        })
    }

    // 创建一个校验请求参数的拦截器
    paramInterceptor := func(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            if r.URL.Query().Get("id") == "" {
                http.Error(w, "缺少参数:id", http.StatusBadRequest)
                return
            }
            next.ServeHTTP(w, r)
        })
    }

    // 将拦截器与 HTTP 处理程序链接
    handler := paramInterceptor(timeInterceptor(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("Hello, World!"))
    })))

    // 启动服务器
    log.Fatal(http.ListenAndServe(":8080", handler))
}

Dalam contoh ini, timeInterceptor 拦截器记录请求处理时间,而 paramInterceptor pemintas mengesahkan parameter permintaan. Dengan merantai pemintas, kami boleh melaksanakan logik ini sebelum dan selepas memproses permintaan.

Ringkasan

Pemintas ialah alat berkuasa untuk meningkatkan fungsi program Golang. Ia membenarkan anda melaksanakan kod tersuai sebelum dan selepas fungsi dijalankan, membolehkan operasi seperti pengelogan, pengesahan dan kebenaran.

Atas ialah kandungan terperinci Pemintas Golang: sepintas lalu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn