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エコシステムに属する他のプロジェクトを直接使用することはできません。