Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Menguasai pemintas di Golang

Menguasai pemintas di Golang

王林
王林asal
2024-04-07 21:33:02622semak imbas

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.

在 Golang 中驾驭拦截器

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 Pengendali. Antara muka ini mentakrifkan dua kaedah: 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.

    Berikut ialah contoh mencipta pemintas:

    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)
    }
    Kes praktikal

    Dalam contoh ini, kami mencipta pemintas log ringkas yang bertanggungjawab untuk mencetak laluan URL semua permintaan masuk ke konsol .

    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)
        })
    }

    Kami boleh menambah pemintas ini pada penghala kami seperti ini: 🎜
    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!

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