Go言語でルーティングミドルウェアを実装する方法

王林
リリース: 2023-12-17 17:28:00
オリジナル
1317 人が閲覧しました

Go言語でルーティングミドルウェアを実装する方法

Go 言語でルーティング ミドルウェアを実装する方法、具体的なコード例が必要です

はじめに:

Go 言語の Web 開発では、ルーティングは次のようになります。欠かせない部品。ルーティングミドルウェアは、リクエストが目的の処理機能に到達する前に実行される機能モジュールです。リクエストに対するインターセプト、検証、記録などの操作を実行できるため、開発者がいくつかの一般的な機能を処理し、コードの再利用性を向上させることができます。

この記事では、Go 言語でルーティング ミドルウェアを実装する方法と具体的なコード例を紹介します。

1. ゴリラ/マルチプレクサ ライブラリを使用してルーティング ミドルウェアを実装します。

  1. ゴリラ/マルチプレクサ ライブラリをインストールします

ターミナルで次のコマンドを実行して、ルーティング ミドルウェアを実装します。 Gorilla/mux ライブラリをインストールします:

go get -u github.com/gorilla/mux
ログイン後にコピー
  1. ルーティング ミドルウェアの作成

ルーティング ミドルウェアの作成を開始しましょう。まず、ミドルウェア関数を定義するための新しいファイル middleware.go を作成します。

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!")
}
ログイン後にコピー

上記のコードでは、http.Handler 型の次のパラメータを受け入れる、middleware という名前の関数を定義します。新しい http.Handler を返すことで、ターゲット ハンドラー関数をラップします。ラップされたハンドラーでは、カスタム ロジックを追加し、next.ServeHTTP(w, r) を呼び出して、リクエストを次のミドルウェアまたはターゲット ハンドラー関数に渡すことができます。

main 関数では、r.Use(middleware) を通じてミドルウェアをすべてのルートに適用します。

  1. コードの実行

ターミナルで次のコマンドを実行してコードを実行します:

go run main.go
ログイン後にコピー
ログイン後にコピー

ここで、localhost:8080 にアクセスすると、コンソールに「ミドルウェアを実行しています」と出力されていることがわかります。

2. net/http ライブラリを使用してルーティング ミドルウェアを実装する

サードパーティ ライブラリを使用しない場合は、net/http ライブラリを使用してルーティング ミドルウェアを実装することもできます。

以下は具体的なサンプル コードです:

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!")
}
ログイン後にコピー

上記のコードでは、http.Handler 型の次のパラメーターを受け入れる、middleware という名前の関数を定義します。新しい http.Handler を返すことで、ターゲット ハンドラー関数をラップします。ラップされたハンドラーでは、カスタム ロジックを追加し、next.ServeHTTP(w, r) を呼び出して、リクエストを次のミドルウェアまたはターゲット ハンドラー関数に渡すことができます。

main 関数では、新しい ServeMux を作成し、mux.Handle("/", handler) を使用してミドルウェアをルート ルートに適用します。

  1. コードの実行

ターミナルで次のコマンドを実行してコードを実行します:

go run main.go
ログイン後にコピー
ログイン後にコピー

ここで、localhost:8080 にアクセスすると、コンソールに「ミドルウェアを実行中」と出力されていることがわかります。

結論:

上記のサンプルコードを通じて、Go 言語でルーティングミドルウェアを実装する方法を学びました。ルーティング ミドルウェアは、サードパーティのライブラリを使用するか、net/http ライブラリを直接使用して簡単に実装できます。この機能は、いくつかの一般的な機能要件を処理し、コードの再利用性を向上させ、アプリケーションをより柔軟で保守しやすくするのに役立ちます。この記事がお役に立てば幸いです!

以上がGo言語でルーティングミドルウェアを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!