首頁  >  文章  >  後端開發  >  如何在 Go 中動態管理 HTTP 路由處理程序?

如何在 Go 中動態管理 HTTP 路由處理程序?

Linda Hamilton
Linda Hamilton原創
2024-10-31 17:58:45539瀏覽

How to Dynamically Manage HTTP Route Handlers in Go?

在Go 中動態管理HTTP 路由處理程序

在Go 中使用HTTP 伺服器時,動態修改的彈性可能會很有幫助無需重新啟動應用程式即可路由處理程序。本文為原生 http.ServerMux 和流行的 Gorilla Toolkit 的 mux.Router 提供了一個解決方案。

傳統上,管理路由的一種方法是透過傳回 404 狀態碼來處理已停用的功能。然而,更通用的解決方案包括攔截傳入請求並檢查路由目前是否已啟用。

為此,我們引入了 Handlers 類型,它是具有關聯啟用標誌的路由處理程序的集合。 ServeHTTP 方法透過檢查標誌並呼叫處理程序或傳回 404 錯誤來處理傳入請求。

HandleFunc 方法向底層多工器註冊路由並將它們新增至 Handlers 對應。隨後呼叫時,此方法可確保僅執行已啟用的處理程序。

<code class="go">package main

import (
    "net/http"
    "sync"
)

type HasHandleFunc interface {
    HandleFunc(pattern string, handler func(w http.ResponseWriter, req *http.Request))
}
type Handler struct {
    http.HandlerFunc
    Enabled bool
}
type Handlers map[string]*Handler

func (h Handlers) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    path := r.URL.Path
    if handler, ok := h[path]; ok && handler.Enabled {
        handler.ServeHTTP(w, r)
    } else {
        http.Error(w, "Not Found", http.StatusNotFound)
    }
}

func (h Handlers) HandleFunc(mux HasHandleFunc, pattern string, handler http.HandlerFunc) {
    h[pattern] = &Handler{handler, true}
    mux.HandleFunc(pattern, h.ServeHTTP)
}

func main() {
    mux := http.NewServeMux()
    handlers := Handlers{}
    handlers.HandleFunc(mux, "/", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("this will show once"))
        handlers["/"].Enabled = false
        // the route to '/' is now disabled
    })
    http.Handle("/", mux)
    http.ListenAndServe(":9020", nil)
}</code>

透過此解決方案,您可以動態停用或啟用路由,甚至設定基於時間的路由模式,滿足靈活的需求Go 中的 HTTP 路由管理。

以上是如何在 Go 中動態管理 HTTP 路由處理程序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn