」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在「http.HandleFunc」之外的 Go HTTP 路由中實作通配符支援?

如何在「http.HandleFunc」之外的 Go HTTP 路由中實作通配符支援?

發佈於2024-12-22
瀏覽:521

How to Implement Wildcard Support in Go HTTP Routing Beyond `http.HandleFunc`?

使用自訂處理程序與通配符進行高級處理程序模式匹配

當使用http.HandleFunc 在Go 中定義路由模式時,內建機制不提供通配符支援。這可能是捕獲動態 URL 元件的限制因素。

具有正則表達式模式匹配的自定義處理程序

要克服此限制,可以創建一個自定義處理程序支持使用正則表達式的靈活模式匹配。這是一個範例:

import (
    "net/http"
    "regexp"
)

type route struct {
    pattern *regexp.Regexp
    handler http.Handler
}

type RegexpHandler struct {
    routes []*route
}

// Handler adds a route to the custom handler.
func (h *RegexpHandler) Handler(pattern *regexp.Regexp, handler http.Handler) {
    h.routes = append(h.routes, &route{pattern, handler})
}

// HandleFunc adds a function-based route to the custom handler.
func (h *RegexpHandler) HandleFunc(pattern *regexp.Regexp, handler func(http.ResponseWriter, *http.Request)) {
    h.routes = append(h.routes, &route{pattern, http.HandlerFunc(handler)})
}

// ServeHTTP iterates through registered routes and checks if any pattern matches the request. If a match is found, the corresponding handler is invoked.
func (h *RegexpHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    for _, route := range h.routes {
        if route.pattern.MatchString(r.URL.Path) {
            route.handler.ServeHTTP(w, r)
            return
        }
    }
    // No pattern matched, return a 404 response.
    http.NotFound(w, r)
}

用法:

自訂處理程序處理具有通配符模式的 URL 的範例用法:

import (
    "log"
    "net/http"
)

func main() {
    rh := &RegexpHandler{}

    // Define a regular expression for capturing any valid URL string.
    pattern := regexp.MustCompile(`/groups/.*/people`)
    rh.HandleFunc(pattern, peopleInGroupHandler)

    // Start the web server and use the custom handler.
    log.Fatal(http.ListenAndServe(":8080", rh))
}

這種方法可讓您建立超出 http.HandleFunc 限制的靈活路由模式,同時保持對自訂處理程序中路徑匹配邏輯的控制。

最新教學 更多>
  • 為什麼我的CSS背景圖像出現?
    為什麼我的CSS背景圖像出現?
    故障排除:CSS背景圖像未出現 ,您的背景圖像儘管遵循教程說明,但您的背景圖像仍未加載。圖像和样式表位於相同的目錄中,但背景仍然是空白的白色帆布。 而不是不棄用的,您已經使用了CSS樣式: bockent {背景:封閉圖像文件名:背景圖:url(nickcage.jpg); 如果您的html,cs...
    程式設計 發佈於2025-04-30
  • 在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在JTable中維護jtable單元格渲染後,在JTable中,在JTable中實現自定義單元格渲染和編輯功能可以增強用戶體驗。但是,至關重要的是要確保即使在編輯操作後也保留所需的格式。 在設置用於格式化“價格”列的“價格”列,用戶遇到的數字格式丟失的“價格”列的“價格”之後,問題在設置自定義單元...
    程式設計 發佈於2025-04-30
  • 哪種方法更有效地用於點 - 填點檢測:射線跟踪或matplotlib \的路徑contains_points?
    哪種方法更有效地用於點 - 填點檢測:射線跟踪或matplotlib \的路徑contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    程式設計 發佈於2025-04-30
  • Matplotlib X軸日期標籤格式自定義指南
    Matplotlib X軸日期標籤格式自定義指南
    Customizing Date Formatting for X-Axis Tick LabelsWhen working with time series data, it is common to encounter graphs with dates displayed on the x-a...
    程式設計 發佈於2025-04-30
  • 如何使用“ JSON”軟件包解析JSON陣列?
    如何使用“ JSON”軟件包解析JSON陣列?
    parsing JSON與JSON軟件包 QUALDALS:考慮以下go代碼:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    程式設計 發佈於2025-04-30
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-04-30
  • Python高效去除文本中HTML標籤方法
    Python高效去除文本中HTML標籤方法
    在Python中剝離HTML標籤,以獲取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    程式設計 發佈於2025-04-30
  • 如何同步迭代並從PHP中的兩個等級陣列打印值?
    如何同步迭代並從PHP中的兩個等級陣列打印值?
    同步的迭代和打印值來自相同大小的兩個數組使用兩個數組相等大小的selectbox時,一個包含country代碼的數組,另一個包含鄉村代碼,另一個包含其相應名稱的數組,可能會因不當提供了exply for for for the uncore for the forsion for for ytry...
    程式設計 發佈於2025-04-30
  • 解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    程式設計 發佈於2025-04-30
  • 如何限制動態大小的父元素中元素的滾動範圍?
    如何限制動態大小的父元素中元素的滾動範圍?
    在交互式接口中實現垂直滾動元素的CSS高度限制問題:考慮一個佈局,其中我們具有與用戶垂直滾動一起移動的可滾動地圖div,同時與固定的固定sidebar保持一致。但是,地圖的滾動無限期擴展,超過了視口的高度,阻止用戶訪問頁面頁腳。 $("#map").css({ margin...
    程式設計 發佈於2025-04-30
  • 哪種在JavaScript中聲明多個變量的方法更可維護?
    哪種在JavaScript中聲明多個變量的方法更可維護?
    在JavaScript中聲明多個變量:探索兩個方法在JavaScript中,開發人員經常遇到需要聲明多個變量的需要。對此的兩種常見方法是:在單獨的行上聲明每個變量: 當涉及性能時,這兩種方法本質上都是等效的。但是,可維護性可能會有所不同。 第一個方法被認為更易於維護。每個聲明都是其自己的語句,使...
    程式設計 發佈於2025-04-30
  • 如何在Java的全屏獨家模式下處理用戶輸入?
    如何在Java的全屏獨家模式下處理用戶輸入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    程式設計 發佈於2025-04-30
  • 在網頁開發中如何防止文本換行到多行?
    在網頁開發中如何防止文本換行到多行?
    在Web開發中將文本限制為單行白空間屬性一個簡單但有效的解決方案是使用白空間屬性。通過將白空間設置為Nowrap,您可以指示瀏覽器禁止文本跨多行破裂。 div { 白色空間:nowrap; } ,以防止包裹的文本超出指定的高度,結合白色空間:現在與溢出:隱藏。這種組合可以水平和垂直截斷文本。...
    程式設計 發佈於2025-04-30
  • 解決Quicken一步更新不起作用問題,撥打+-9
    解決Quicken一步更新不起作用問題,撥打+-9
    需要Quicken的專家幫助?只需撥打1-888-848-2409以獲得專業幫助即可。無論是故障排除錯誤,重置密碼還是管理帳戶設置,他們的知識淵博的支持團隊都可以提供幫助。 Quicken的支持可從PST上午5點至下午5點,每週7天,確保幫助永遠不會遙不可及。 https://www.devex...
    程式設計 發佈於2025-04-30
  • HTML格式標籤
    HTML格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2025-04-30

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3