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

Menguasai pemintas di Golang

王林
Lepaskan: 2024-04-07 21:33:02
asal
658 orang telah melayarinya

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)
    }
    Salin selepas log masuk
    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)
        })
    }
    Salin selepas log masuk

    Kami boleh menambah pemintas ini pada penghala kami seperti ini: 🎜
    mux.Handle("/private", auth(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // 私有区域的逻辑
    })))
    Salin selepas log masuk

Atas ialah kandungan terperinci Menguasai pemintas di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan