Fiberは、インターネット上で最も人気のあるWebフレームワークExpressからインスピレーションを受けています。私たちはExpress使いやすさGo高速なパフォーマンスを組み合わせています。もし以前にNode.jsを使用して(Expressまたは同様のフレームワークを使用してWebアプリケーションを構築したことがある場合、多くのメソッドや原則はあなたにとって非常に理解しやすいでしょう。

クイックスタート

インストール

Go 1.17 以上がインストールされていることを確認してください。

プロジェクトを初期化するには、フォルダを作成してそのフォルダ内で go mod init github.com/your/repo を実行し、次に go get コマンドを使用してFiberをインストールします。

go get -u github.com/gofiber/fiber/v2

Hello World

package main

// fiberパッケージをインポート
import "github.com/gofiber/fiber/v2"

func main() {
    // fiberアプリを定義
    app := fiber.New()

    // httpルートを定義
    app.Get("/", func(c *fiber.Ctx) error {
        // 文字列としてHello Worldを返す
        return c.SendString("Hello, World ?!")
    })

    // ポート3000でリッスン
    app.Listen(":3000")
}

アクセス先: http://localhost:3000/

基本的なルーティング

Fiberの基本的なルーティング例

func main() {
    app := fiber.New()

    // GET /api/register
    app.Get("/api/*", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("✋ %s", c.Params("*"))
        return c.SendString(msg) // => ✋ register
    })

    // GET /flights/LAX-SFO
    app.Get("/flights/:from-:to", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("? From: %s, To: %s", c.Params("from"), c.Params("to"))
        return c.SendString(msg) // => ? From: LAX, To: SFO
    })

    // GET /dictionary.txt
    app.Get("/:file.:ext", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("? %s.%s", c.Params("file"), c.Params("ext"))
        return c.SendString(msg) // => ? dictionary.txt
    })

    // GET /john/75
    app.Get("/:name/:age/:gender?", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("? %s is %s years old", c.Params("name"), c.Params("age"))
        return c.SendString(msg) // => ? john is 75 years old
    })

    // GET /john
    app.Get("/:name", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("Hello, %s ?!", c.Params("name"))
        return c.SendString(msg) // => Hello john ?!
    })

    log.Fatal(app.Listen(":3000"))
}

静的ファイルの提供

静的ファイルの提供の設定

func main() {
    app := fiber.New()

    app.Static("/", "./public")
    // => http://localhost:3000/js/script.js
    // => http://localhost:3000/css/style.css

    app.Static("/prefix", "./public")
    // => http://localhost:3000/prefix/js/script.js
    // => http://localhost:3000/prefix/css/style.css

    app.Static("*", "./public/index.html")
    // => http://localhost:3000/any/path/shows/index/html

    log.Fatal(app.Listen(":3000"))
}

ミドルウェア

ミドルウェアを使用してHTTPリクエストの処理能力を強化する。

func main() {
    app := fiber.New()

    // 任意のルートにマッチし、ここでクロージャ関数を使用してミドルウェアをカスタマイズ
    app.Use(func(c *fiber.Ctx) error {
        fmt.Println("? First handler")
        // 次のミドルウェアやルート関数の処理を続行
        return c.Next()
    })

    // /apiで始まるルートにマッチ
    app.Use("/api", func(c *fiber.Ctx) error {
        fmt.Println("? Second handler")
        return c.Next()
    })
    
    // 例外処理のための組み込みミドルウェアを使用
    app.Use(recover.New())

    // GET /api/register
    app.Get("/api/list", func(c *fiber.Ctx) error {
        fmt.Println("? Last handler")
        return c.SendString("Hello, World ?!")
    })

    log.Fatal(app.Listen(":3000"))
}

テンプレートエンジン

テンプレートエンジンが設定されていない場合、Fiber はデフォルトで html/template を使用します。

package main

import (
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/template/pug"
)

func main() {
    // テンプレートエンジンを設定する
    app := fiber.New(fiber.Config{
        Views: pug.New("./views", ".pug"),
    })

    app.Get("/", func(c *fiber.Ctx) error {
        // fiber.map テンプレートパラメータを使用して ./views/home.pug テンプレートをレンダリングする
        return c.Render("home", fiber.Map{
            "title": "ホームページ",
            "year":  1999,
        })
    })

    log.Fatal(app.Listen(":3000"))
}

Cross-Origin Resource Sharing (CORS) ミドルウェア

Fiber の CORS ミドルウェアは、CORS 攻撃を防ぐためのさまざまなオプションを使用して、クロスオリジンリソース共有を有効にできます。

import (
    "log"
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/cors"
)

func main() {
    app := fiber.New()

    // デフォルトの CORS 構成
    app.Use(cors.New())

    // または、特定のドメインからのリクエストを許可するためにCORSパラメータをカスタマイズする
    app.Use(cors.New(cors.Config{
        AllowOrigins: "https://www.tizi365.com, https://tizi365.com",
        AllowHeaders:  "Origin, Content-Type, Accept",
    }))

    log.Fatal(app.Listen(":3000"))
}

Origin ヘッダーに任意のドメインを渡してCORSをチェックする:

curl -H "Origin: https://www.tizi365.com" --verbose http://localhost:3000

カスタム404レスポンス

func main() {
    app := fiber.New()

    app.Static("/", "./public")

    app.Get("/demo", func(c *fiber.Ctx) error {
        return c.SendString("これはデモです!")
    })

    app.Post("/register", func(c *fiber.Ctx) error {
        return c.SendString("ようこそ!")
    })

    // 最後に参照されたミドルウェアは、404を含むすべてのリクエストに一致します
    app.Use(func(c *fiber.Ctx) error {
        // その他の処理ロジック
        // 404ステータスを返す
        return c.SendStatus(404)
        // => 404 "Not Found"
    })

    log.Fatal(app.Listen(":3000"))
}

JSONレスポンス

FiberがJSONデータを返す例。

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    app := fiber.New()

    app.Get("/user", func(c *fiber.Ctx) error {
        return c.JSON(&User{"John", 20})
        // => {"name":"John", "age":20}
    })

    app.Get("/json", func(c *fiber.Ctx) error {
        return c.JSON(fiber.Map{
            "success": true,
            "message": "こんにちは、John!",
        })
        // => {"success":true, "message":"こんにちは、John!"}
    })

    log.Fatal(app.Listen(":3000"))
}

リカバリーミドルウェア

プログラムのクラッシュと終了を防ぐために、パニックエラーをインターセプトするリカバリーミドルウェア。

import (
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/recover"
)

func main() {
    app := fiber.New()
	// パニック例外をインターセプトするためにリカバリーミドルウェアを使用する
    app.Use(recover.New())

    app.Get("/", func(c *fiber.Ctx) error {
        panic("通常、これはアプリをクラッシュさせます")
    })

    log.Fatal(app.Listen(":3000"))
}

ベンチマーク

[

制限

  • Fiberでは、最新のGoバージョンと互換性がない場合があります。Fiber 2.40.0 は、Goバージョン1.17から1.21でテストされています。
  • Fiberはnet/httpインターフェースと互換性がありません。つまり、gqlgen、go-swaggerなどのプロジェクトや、net/httpエコシステムに属する他のプロジェクトを直接使用することはできません。