ホームページ > バックエンド開発 > Golang > リーフ golang ルーティングの実装

リーフ golang ルーティングの実装

WBOY
リリース: 2023-05-14 15:57:37
オリジナル
1134 人が閲覧しました

Web 開発における Go 言語の人気により、Web アプリケーションの開発に Go 言語を使用しようとする開発者が増えています。 Web アプリケーションの開発において、ルーティングの実装は非常に重要な部分です。今回はGo言語をベースにしたルーティングフレームワーク、リーフを紹介します。

1.リーフとは何ですか?

Leaf は、柔軟性があり、使いやすく、効率的な軽量の Go 言語ルーティング ライブラリです。 Leaf は HTTP サービスだけでなく、WebSocket や FTP などのさまざまなネットワーク プロトコルのルーティング実装にも使用できます。

Leaf は RESTful スタイルの API 実装をサポートし、カスタム ミドルウェアの開発と使用をサポートするミドルウェア機能を提供します。さらに、Leaf は HTTP リクエストおよびレスポンス データのカスタマイズされた処理もサポートしており、さまざまな特殊なビジネス ニーズに対応できます。

Leaf のソース コードは GitHub でホストされており、MIT ライセンスに基づくオープン ソースであり、自由に使用、変更、配布できます。

2. Leaf のルーティングの実装

Leaf でのルーティングの実装は非常にシンプルで、ルーティング オブジェクトを作成してルーティング ルールを追加するだけです。

package main

import (
    "fmt"
    "github.com/vardius/leaf"
)

func main() {
    r := leaf.NewRouter()
    r.GET("/", func(c *leaf.Context) {
        fmt.Fprintln(c.Writer, "Hello, Leaf!")
    })
    
    r.Run(":8080")
}
ログイン後にコピー

上記のコードでは、NewRouter 関数を使用してルーティング オブジェクトを作成し、そのルーティング オブジェクトに GET リクエストのルーティング ルールを追加しました。要求されたパスは次のとおりです。ルールでルート パス / として指定されます。 GET リクエストがサーバーにアクセスすると、ルーティング ルールに対応する匿名関数が実行されます。ルーティング ルールのマッチング方法にはプレフィックス マッチング アルゴリズムが使用されるため、複数のルールを定義することでさまざまなリクエスト パスに対応できます。

リーフでは、ルーティング ルールはパラメータの受け渡しをサポートしています。以下に示すように、:param を使用してパラメータを定義できます。

r.GET("/user/:id", func(c *leaf.Context) {
    id := c.Params["id"]
    fmt.Fprintf(c.Writer, "User ID: %s", id)
})
ログイン後にコピー

この例では、パラメータ :id# を使用して、GET リクエストのルーティング ルールを定義します。 ##。 /user/123 にアクセスする GET リクエストがある場合、Leaf は自動的にルーティング ルールに一致し、パラメータ 123 を匿名の id 変数に渡します。関数。ルーティング ルールに渡されるパラメータ値は、c.Params を通じて取得できます。

Leaf はルーティング グループの処理もサポートしています。ルーティング グループは、同じプレフィックスを持つルーティング ルールのグループであり、

Group 関数を通じて実装できます。次に例を示します。

r.Group("/api/v1", func() {
    r.GET("/user/:id", func(c *leaf.Context) {
        id := c.Params["id"]
        fmt.Fprintf(c.Writer, "User ID: %s", id)
    })
    r.POST("/user", func(c *leaf.Context) {
        fmt.Fprintln(c.Writer, "Create User")
    })
    r.PUT("/user/:id", func(c *leaf.Context) {
        id := c.Params["id"]
        fmt.Fprintf(c.Writer, "Update User: %s", id)
    })
    r.DELETE("/user/:id", func(c *leaf.Context) {
        id := c.Params["id"]
        fmt.Fprintf(c.Writer, "Delete User: %s", id)
    })
})
ログイン後にコピー

上記の例では、

Group 関数を使用して、/api/v1## で始まるすべてのルートを含むルーティング グループを作成します。 #で始まるリクエストパス。ルーティング グループ内では、パラメータの受け渡し、GET、POST、PUT、DELETE リクエストなどの HTTP リクエストのルーティング ルールをいくつか定義します。 3. Leaf のミドルウェア サポート

Leaf はミドルウェアの開発と使用もサポートします。 Leaf では、ミドルウェアはリクエストとレスポンスを処理するプログラム コードの一部です。ミドルウェアは、リクエストヘッダーの追加、認証情報の検証、リクエストパラメータとレスポンス結果の処理など、リクエストとレスポンスに対してさまざまな処理を実行できます。 Leaf は、

Use

メソッドを通じてミドルウェアを追加します。例: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>r.Use(func(c *leaf.Context) { // do something before request c.Next() // 执行下一个中间件或匿名函数 // do something after request })</pre><div class="contentsignin">ログイン後にコピー</div></div> この例では、ミドルウェアを定義し、関数本体のコードは、リクエストが一致する前に実行されます。ルーティングルール。ミドルウェアでは、

c.Next()

を呼び出すことで、ルーティング ルール内の次のミドルウェアまたは匿名関数を実行できます。匿名関数の実行後、現在のミドルウェアに戻り、後続のコードを実行します。 もちろん、Leaf は複数のミドルウェアのチェーン呼び出しもサポートしています。

AppendMiddleware

メソッドを使用して複数のミドルウェアを追加できます。たとえば: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>r.AppendMiddleware(A) r.AppendMiddleware(B) r.AppendMiddleware(C)</pre><div class="contentsignin">ログイン後にコピー</div></div>上の例では、 pass

AppendMiddleware

このメソッドは、3 つのミドルウェア A、B、および C を順番に追加します。リクエストが届くと、それらは順番に実行されます。 4. Leaf の MVC パターン サポート

Leaf は、MVC パターンに基づいた開発サポートも提供します。 Leafでは、

Controller

を通じてコン​​トローラを定義でき、コントローラ内に複数の処理メソッドを定義できます。コントローラーは任意のビジネス ロジックを実装でき、Leaf はルーティング ルールを通じてコン​​トローラー内のメソッドを自動的に照合し、実行します。以下は簡単な例です: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>type UserController struct { leaf.Controller } func (c *UserController) GetUser() { id := c.Params[&quot;id&quot;] fmt.Fprintf(c.Writer, &quot;User ID: %s&quot;, id) } func (c *UserController) CreateUser() { fmt.Fprintln(c.Writer, &quot;Create User&quot;) } func (c *UserController) UpdateUser() { id := c.Params[&quot;id&quot;] fmt.Fprintf(c.Writer, &quot;Update User: %s&quot;, id) } func (c *UserController) DeleteUser() { id := c.Params[&quot;id&quot;] fmt.Fprintf(c.Writer, &quot;Delete User: %s&quot;, id) } func main() { r := leaf.NewRouter() userController := &amp;UserController{} r.Group(&quot;/api/v1&quot;, func() { r.GET(&quot;/user/:id&quot;, userController.GetUser) r.POST(&quot;/user&quot;, userController.CreateUser) r.PUT(&quot;/user/:id&quot;, userController.UpdateUser) r.DELETE(&quot;/user/:id&quot;, userController.DeleteUser) }) r.Run(&quot;:8080&quot;) }</pre><div class="contentsignin">ログイン後にコピー</div></div>この例では、

UserController

コントローラーを定義し、その中に GetUserCreateUser を実装します。 4 つのメソッド UpdateUser、および DeleteUser は、それぞれ GET、POST、PUT、および DELETE リクエストを処理するために使用されます。ルーティング グループでは、これらのメソッドを対応するリクエストにマップし、ルーティング ルールのプレフィックスを /api/v1 として指定します。 5. Leaf の HTTP リクエストとレスポンスの処理

Leaf では、ビジネス ニーズに応じて HTTP リクエストとレスポンスのデータを処理できます。 Leaf は、リクエスト データと応答データを処理するための次のようなメソッドを豊富に提供します。

c.SetHeader(key, value) // 设置响应头
c.GetHeader(key) // 获取请求头
c.SetCookie(cookie) // 设置 Cookie
c.GetCookie(name) // 获取 Cookie
c.SetStatusCode(code int) // 设置响应状态码
c.WriteJSON(v interface{}) // 响应 JSON 数据
c.WriteFile(file string) // 响应文件
c.String(code int, s string) // 响应字符串
ログイン後にコピー

これらのメソッドを通じて、リクエスト データと応答データを簡単に処理できます。

6.概要

Leaf は非常に優れた Go 言語のルーティング ライブラリであり、軽量かつ効率的で使いやすいだけでなく、ミドルウェア、MVC モード、HTTP リクエストとレスポンスの処理など、さまざまな機能を提供します。 Webアプリケーション開発のさまざまなニーズに応えます。 Go で優れたルーティング実装を探している場合は、Leaf を試してみる価値があります。

以上がリーフ golang ルーティングの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート