Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menggunakan Ungkapan Biasa untuk Penghalaan URL dalam `http.HandleFunc()` Go?

Bagaimanakah Saya Boleh Menggunakan Ungkapan Biasa untuk Penghalaan URL dalam `http.HandleFunc()` Go?

Linda Hamilton
Lepaskan: 2024-11-27 22:18:11
asal
230 orang telah melayarinya

How Can I Use Regular Expressions for URL Routing in Go's `http.HandleFunc()`?

Menggunakan Ungkapan Biasa dalam Pengendalian URL di Golang

Di Golang, kaedah http.HandleFunc() membenarkan anda mendaftarkan corak URL untuk HTTP pengendalian permintaan. Walau bagaimanapun, kaedah ini tidak menyokong penggunaan ungkapan biasa untuk padanan corak. Ini menimbulkan persoalan tentang cara menggunakan ungkapan biasa untuk menentukan pemprosesan fungsi yang sesuai berdasarkan corak URL.

Pustaka standard http.HandleFunc() tidak menyokong ungkapan biasa untuk pemadanan URL. Sebaliknya, ia hanya boleh memadankan laluan tetap, berakar (cth., "/favicon.ico") atau subpokok berakar (cth., "/images/"). Walaupun corak yang lebih panjang diutamakan daripada yang lebih pendek, pilihannya adalah terhad.

Untuk mengatasi pengehadan ini dan menggunakan ungkapan biasa untuk corak URL, anda boleh mengatasi corak URL akar dengan corak yang lebih generik. Di dalam fungsi pengendali, anda kemudiannya boleh melakukan pemadanan dan penghalaan ungkapan biasa selanjutnya berdasarkan laluan URL tertentu.

Menggunakan Regexp untuk Menghalakan Permintaan

Kod berikut menunjukkan cara untuk menggunakan ungkapan biasa untuk penghalaan URL:

import (
    "fmt"
    "net/http"
    "regexp"
)

func main() {
    http.HandleFunc("/", route)
    http.ListenAndServe(":8080", nil)
}

var rNum = regexp.MustCompile(`\d`)  // Has digit(s)
var rAbc = regexp.MustCompile(`abc`) // Contains "abc"

func route(w http.ResponseWriter, r *http.Request) {
    switch {
    case rNum.MatchString(r.URL.Path):
        digits(w, r)
    case rAbc.MatchString(r.URL.Path):
        abc(w, r)
    default:
        w.Write([]byte("Unknown Pattern"))
    }
}

func digits(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Has digits"))
}

func abc(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Has abc"))
}
Salin selepas log masuk

Dalam contoh ini, fungsi utama mendaftarkan URL akar ("/") sebagai corak kad bebas. Di dalam fungsi route(), ia menggunakan ungkapan biasa (rNum dan rAbc) untuk memadankan dua corak URL tertentu: laluan dengan sekurang-kurangnya satu digit (cth., "/123") dan laluan yang mengandungi rentetan "abc" (cth., "/ abcde"). Jika permintaan sepadan dengan mana-mana corak, fungsi yang sesuai (cth., digit() atau abc()) dilaksanakan. Jika tidak, mesej lalai dipaparkan.

Pendekatan Alternatif

Selain pendekatan di atas, anda juga boleh menggunakan perpustakaan luaran seperti Gorilla MUX, yang menyediakan lebih fleksibel mekanisme penghalaan dengan sokongan untuk ekspresi biasa.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Ungkapan Biasa untuk Penghalaan URL dalam `http.HandleFunc()` Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan