Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie Routing-Middleware in der Go-Sprache

So implementieren Sie Routing-Middleware in der Go-Sprache

王林
王林Original
2023-12-17 17:28:001319Durchsuche

So implementieren Sie Routing-Middleware in der Go-Sprache

Für die Implementierung der Routing-Middleware in der Go-Sprache sind spezifische Codebeispiele erforderlich

Einführung:

Bei der Webentwicklung in der Go-Sprache ist Routing ein unverzichtbarer Bestandteil. Routing-Middleware ist ein Funktionsmodul, das ausgeführt wird, bevor die Anforderung die Zielverarbeitungsfunktion erreicht. Sie können Anfragen abfangen, überprüfen, aufzeichnen und andere Vorgänge ausführen und so Entwicklern bei der Handhabung einiger allgemeiner Funktionen helfen und die Wiederverwendbarkeit des Codes verbessern.

In diesem Artikel wird die Implementierung von Routing-Middleware in der Go-Sprache vorgestellt und spezifische Codebeispiele bereitgestellt.

1. Verwenden Sie die Gorilla/Mux-Bibliothek, um Routing-Middleware zu implementieren.

  1. Installieren Sie die Gorilla/Mux-Bibliothek
  2. Lassen Sie uns jetzt beginnen. Um Routing-Middleware zu erstellen, erstellen Sie zunächst eine neue Datei middleware.go, um unsere Middleware-Funktion zu definieren.
go get -u github.com/gorilla/mux

Im obigen Code definieren wir eine Funktion namens Middleware, die als nächstes einen Parameter vom Typ http.Handler akzeptiert. Wir umschließen die Zielhandlerfunktion, indem wir einen neuen http.Handler zurückgeben. Im umschlossenen Handler können wir unsere benutzerdefinierte Logik hinzufügen und dann next.ServeHTTP(w, r) aufrufen, um die Anforderung an die nächste Middleware- oder Zielhandlerfunktion weiterzuleiten.

    In der Hauptfunktion wenden wir unsere Middleware über r.Use (Middleware) auf alle Routen an.
Führen Sie den Code aus

Führen Sie den folgenden Befehl im Terminal aus, um den Code auszuführen:

package main

import (
    "fmt"
    "net/http"

    "github.com/gorilla/mux"
)

func middleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // 在请求到达目标处理函数之前执行的操作
        
        fmt.Println("Executing middleware")

        // 调用下一个中间件或目标处理函数
        next.ServeHTTP(w, r)
    })
}

func main() {
    r := mux.NewRouter()

    // 使用我们的中间件
    r.Use(middleware)

    // 路由定义
    r.HandleFunc("/", homeHandler).Methods("GET")

    // 启动服务器
    http.ListenAndServe(":8080", r)
}

func homeHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, World!")
}

Wenn wir nun auf localhost:8080 zugreifen, können wir in der Konsole die Ausgabe „Middleware wird ausgeführt“ sehen.

    2. Verwenden Sie die Net/http-Bibliothek, um Routing-Middleware zu implementieren.
  1. Wenn Sie keine Bibliothek eines Drittanbieters verwenden, können wir auch die Net/http-Bibliothek verwenden, um Routing-Middleware zu implementieren.

Das Folgende ist ein spezifischer Beispielcode:

go run main.go

Im obigen Code definieren wir eine Funktion namens Middleware, die als nächstes einen Parameter vom Typ http.Handler akzeptiert. Wir umschließen die Zielhandlerfunktion, indem wir einen neuen http.Handler zurückgeben. Im umschlossenen Handler können wir unsere benutzerdefinierte Logik hinzufügen und dann next.ServeHTTP(w, r) aufrufen, um die Anforderung an die nächste Middleware- oder Zielhandlerfunktion weiterzuleiten.

In der Hauptfunktion erstellen wir einen neuen ServeMux und verwenden mux.Handle("/", handler), um unsere Middleware auf die Root-Route anzuwenden.

Führen Sie den Code aus

Führen Sie den folgenden Befehl im Terminal aus, um den Code auszuführen:

package main

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

type MyHandler struct{}

func (h *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    fmt.Println("Executing middleware")
    // 调用目标处理函数
    homeHandler(w, r)
}

func middleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // 在请求到达目标处理函数之前执行的操作
        fmt.Println("Executing middleware")
        next.ServeHTTP(w, r)
    })
}

func main() {
    mux := http.NewServeMux()

    // 创建中间件
    handler := middleware(&MyHandler{})

    // 设置路由
    mux.Handle("/", handler)

    // 启动服务器
    log.Fatal(http.ListenAndServe(":8080", mux))
}

func homeHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, World!")
}

Wenn wir nun localhost:8080 besuchen, können wir in der Konsole die Ausgabe „Middleware wird ausgeführt“ sehen.

    Fazit:
  1. Durch den obigen Beispielcode haben wir gelernt, wie man Routing-Middleware in der Go-Sprache implementiert. Routing-Middleware kann einfach mithilfe von Bibliotheken von Drittanbietern oder direkt mithilfe der Net/http-Bibliothek implementiert werden. Diese Funktion kann uns dabei helfen, einige allgemeine Funktionsanforderungen zu erfüllen, die Wiederverwendbarkeit von Code zu verbessern und unsere Anwendungen flexibler und einfacher zu warten. Ich hoffe, dieser Artikel ist hilfreich für Sie!

Das obige ist der detaillierte Inhalt vonSo implementieren Sie Routing-Middleware in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn