Fiberは、GOの最速HTTPエンジンであるFasttttpの上に構築されたExpress Inspired Webフレームワークです。メモリの割り当てとパフォーマンスを念頭に置いて、速い開発のために物事を容易にするように設計されています。
Fiber V3は現在ベータ版で、アクティブな開発中です。エキサイティングな新機能は提供されますが、生産用に安定していない場合があることに注意してください。ミッションクリティカルなアプリケーションについては、最新の安定リリース(v2.x)に固執することをお勧めします。 V3を使用することを選択した場合は、潜在的なバグと壊れた変更に備えてください。常に公式のドキュメントを確認し、更新についてノートをリリースし、注意して進めてください。ハッピーコーディング!
ファイバーには、実行するにはGOバージョン1.23以上が必要です。インストールまたはアップグレードする必要がある場合は、公式GOダウンロードページにアクセスしてください。プロジェクトのセットアップを開始するには、プロジェクトの新しいディレクトリを作成し、ナビゲートします。次に、端末で次のコマンドを実行して、GOモジュールでプロジェクトを初期化します。
go mod init github.com/your/repoGOモジュールとそれらの動作の詳細については、使用Modulesブログ投稿をご覧ください。
プロジェクトをセットアップした後、 go getコマンドでファイバーをインストールできます。
go get -u github.com/gofiber/fiber/v3このコマンドはファイバーパッケージを取得し、プロジェクトの依存関係に追加して、ファイバーでWebアプリケーションの構築を開始できます。
繊維を始めるのは簡単です。 「Hello、World!」で応答するシンプルなWebサーバーを作成するための基本的な例を次に示します。ルートパス。この例は、新しいファイバーアプリの初期化、ルートのセットアップ、サーバーの起動を示しています。
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func main () {
// Initialize a new Fiber app
app := fiber . New ()
// Define a route for the GET method on the root path '/'
app . Get ( "/" , func ( c fiber. Ctx ) error {
// Send a string response to the client
return c . SendString ( "Hello, World !" )
})
// Start the server on port 3000
log . Fatal ( app . Listen ( ":3000" ))
}このシンプルなサーバーは、セットアップと実行が簡単です。ファイバーのコアコンセプト:アプリの初期化、ルート定義、サーバーの起動を紹介します。このGOプログラムを実行するだけで、ブラウザにhttp://localhost:3000アクセスしてメッセージを表示します。
ファイバーは高性能のために最適化されています。つまり、 fiber.ctxから返された値はデフォルトでは不変ではなく、リクエスト全体で再利用されます。経験則として、ハンドラー内のコンテキスト値のみを使用する必要があり、参照を保持してはなりません。ハンドラーから戻ると、コンテキストから取得された値は将来のリクエストで再利用されます。詳細については、ドキュメントをご覧ください。
これらのテストは、TechmpowerとGo Webによって実行されます。すべての結果を確認したい場合は、Wikiをご覧ください。
node.jsから行くように切り替える新しいGophersは、Webアプリケーションまたはマイクロサービスの構築を開始する前に、学習曲線を扱っています。 Fiberは、 Webフレームワークとして、ミニマリズムのアイデアで作成され、 Unixの方法に従って作成されたため、新しいGophersは温かく信頼できる歓迎でGoの世界にすばやく入ることができます。
ファイバーは、インターネット上で最も人気のあるWebフレームワークであるExpressに触発されています。 Expressの容易さとGoの生のパフォーマンスを組み合わせました。 node.js( Expressまたは同様を使用)でWebアプリケーションを実装したことがある場合は、多くの方法と原則があなたに非常に一般的であると思われます。
問題、Discordチャンネル、インターネット全体でユーザーの声を聞いて、あらゆるタスク、締め切り、開発者スキルのための高速で柔軟でフレンドリーなGO Webフレームワークを作成します! ExpressがJavaScriptの世界で行うように。
以下にリストされているのは、一般的な例のいくつかです。コードの例を増やしたい場合は、レシピリポジトリにアクセスするか、ホストされているAPIドキュメントにアクセスしてください。
package main
import (
"fmt"
"log"
"github.com/gofiber/fiber/v3"
)
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" ))
} package main
import (
"encoding/json"
"fmt"
"log"
"github.com/gofiber/fiber/v3"
)
func main () {
app := fiber . New ()
app . Get ( "/api/*" , func ( c fiber. Ctx ) error {
msg := fmt . Sprintf ( " %s" , c . Params ( "*" ))
return c . SendString ( msg ) // => register
}). Name ( "api" )
route := app . GetRoute ( "api" )
data , _ := json . MarshalIndent ( route , "" , " " )
fmt . Println ( string ( data ))
// Prints:
// {
// "method": "GET",
// "name": "api",
// "path": "/api/*",
// "params": [
// "*1"
// ]
// }
log . Fatal ( app . Listen ( ":3000" ))
} package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/static"
)
func main () {
app := fiber . New ()
// Serve static files from the "./public" directory
app . Get ( "/*" , static . New ( "./public" ))
// => http://localhost:3000/js/script.js
// => http://localhost:3000/css/style.css
app . Get ( "/prefix*" , static . New ( "./public" ))
// => http://localhost:3000/prefix/js/script.js
// => http://localhost:3000/prefix/css/style.css
// Serve a single file for any unmatched routes
app . Get ( "*" , static . New ( "./public/index.html" ))
// => http://localhost:3000/any/path/shows/index.html
log . Fatal ( app . Listen ( ":3000" ))
} package main
import (
"fmt"
"log"
"github.com/gofiber/fiber/v3"
)
func main () {
app := fiber . New ()
// Middleware that matches any route
app . Use ( func ( c fiber. Ctx ) error {
fmt . Println ( "? First handler" )
return c . Next ()
})
// Middleware that matches all routes starting with /api
app . Use ( "/api" , func ( c fiber. Ctx ) error {
fmt . Println ( "? Second handler" )
return c . Next ()
})
// GET /api/list
app . Get ( "/api/list" , func ( c fiber. Ctx ) error {
fmt . Println ( "? Last handler" )
return c . SendString ( "Hello, World !" )
})
log . Fatal ( app . Listen ( ":3000" ))
}構成エンジンレンダリング
ファイバーは、ビューエンジンが設定されていない場合、HTML/テンプレートにデフォルトです。
部分的なものを実行したり、Amber、ハンドルバー、口ひげ、またはパグなどの別のエンジンを使用したりする場合は、複数のビューエンジンをサポートするテンプレートパッケージをご覧ください。
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/template/pug"
)
func main () {
// Initialize a new Fiber app with Pug template engine
app := fiber . New (fiber. Config {
Views : pug . New ( "./views" , ".pug" ),
})
// Define a route that renders the "home.pug" template
app . Get ( "/" , func ( c fiber. Ctx ) error {
return c . Render ( "home" , fiber. Map {
"title" : "Homepage" ,
"year" : 1999 ,
})
})
log . Fatal ( app . Listen ( ":3000" ))
}グループ
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func middleware ( c fiber. Ctx ) error {
log . Println ( "Middleware executed" )
return c . Next ()
}
func handler ( c fiber. Ctx ) error {
return c . SendString ( "Handler response" )
}
func main () {
app := fiber . New ()
// Root API group with middleware
api := app . Group ( "/api" , middleware ) // /api
// API v1 routes
v1 := api . Group ( "/v1" , middleware ) // /api/v1
v1 . Get ( "/list" , handler ) // /api/v1/list
v1 . Get ( "/user" , handler ) // /api/v1/user
// API v2 routes
v2 := api . Group ( "/v2" , middleware ) // /api/v2
v2 . Get ( "/list" , handler ) // /api/v2/list
v2 . Get ( "/user" , handler ) // /api/v2/user
log . Fatal ( app . Listen ( ":3000" ))
}ロガー
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/logger"
)
func main () {
app := fiber . New ()
// Use Logger middleware
app . Use ( logger . New ())
// Define routes
app . Get ( "/" , func ( c fiber. Ctx ) error {
return c . SendString ( "Hello, Logger!" )
})
log . Fatal ( app . Listen ( ":3000" ))
}cors
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/cors"
)
func main () {
app := fiber . New ()
// Use CORS middleware with default settings
app . Use ( cors . New ())
// Define routes
app . Get ( "/" , func ( c fiber. Ctx ) error {
return c . SendString ( "CORS enabled!" )
})
log . Fatal ( app . Listen ( ":3000" ))
} Origin Headerのドメインを渡すことにより、Corsを確認してください。
curl -H " Origin: http://example.com " --verbose http://localhost:3000HTTPメソッド
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func main () {
app := fiber . New ()
// Define routes
app . Get ( "/" , static . New ( "./public" ))
app . Get ( "/demo" , func ( c fiber. Ctx ) error {
return c . SendString ( "This is a demo page!" )
})
app . Post ( "/register" , func ( c fiber. Ctx ) error {
return c . SendString ( "Registration successful!" )
})
// Middleware to handle 404 Not Found
app . Use ( func ( c fiber. Ctx ) error {
return c . SendStatus ( fiber . StatusNotFound ) // => 404 "Not Found"
})
log . Fatal ( app . Listen ( ":3000" ))
}JSON
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main () {
app := fiber . New ()
// Route that returns a JSON object
app . Get ( "/user" , func ( c fiber. Ctx ) error {
return c . JSON ( & User { "John" , 20 })
// => {"name":"John", "age":20}
})
// Route that returns a JSON map
app . Get ( "/json" , func ( c fiber. Ctx ) error {
return c . JSON (fiber. Map {
"success" : true ,
"message" : "Hi John!" ,
})
// => {"success":true, "message":"Hi John!"}
})
log . Fatal ( app . Listen ( ":3000" ))
}WebSocket
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/websocket"
)
func main () {
app := fiber . New ()
// WebSocket route
app . Get ( "/ws" , websocket . New ( func ( c * websocket. Conn ) {
defer c . Close ()
for {
// Read message from client
mt , msg , err := c . ReadMessage ()
if err != nil {
log . Println ( "read:" , err )
break
}
log . Printf ( "recv: %s" , msg )
// Write message back to client
err = c . WriteMessage ( mt , msg )
if err != nil {
log . Println ( "write:" , err )
break
}
}
}))
log . Fatal ( app . Listen ( ":3000" ))
// Connect via WebSocket at ws://localhost:3000/ws
}詳細
package main
import (
"bufio"
"fmt"
"log"
"time"
"github.com/gofiber/fiber/v3"
"github.com/valyala/fasthttp"
)
func main () {
app := fiber . New ()
// Server-Sent Events route
app . Get ( "/sse" , func ( c fiber. Ctx ) error {
c . Set ( "Content-Type" , "text/event-stream" )
c . Set ( "Cache-Control" , "no-cache" )
c . Set ( "Connection" , "keep-alive" )
c . Set ( "Transfer-Encoding" , "chunked" )
c . Context (). SetBodyStreamWriter ( func ( w * bufio. Writer ) {
var i int
for {
i ++
msg := fmt . Sprintf ( "%d - the time is %v" , i , time . Now ())
fmt . Fprintf ( w , "data: Message: %s n n " , msg )
fmt . Println ( msg )
w . Flush ()
time . Sleep ( 5 * time . Second )
}
})
return nil
})
log . Fatal ( app . Listen ( ":3000" ))
}回復する
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/recover"
)
func main () {
app := fiber . New ()
// Use Recover middleware to handle panics gracefully
app . Use ( recover . New ())
// Route that intentionally panics
app . Get ( "/" , func ( c fiber. Ctx ) error {
panic ( "normally this would crash your app" )
})
log . Fatal ( app . Listen ( ":3000" ))
}config
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func main () {
app := fiber . New (fiber. Config {
// Configure trusted proxies - WARNING: Only trust proxies you control
// Using TrustProxy: true with unrestricted IPs can lead to IP spoofing
TrustProxy : true ,
TrustProxyConfig : fiber. TrustProxyConfig {
Proxies : [] string { "10.0.0.0/8" , "172.16.0.0/12" }, // Example: Internal network ranges only
},
ProxyHeader : fiber . HeaderXForwardedFor ,
})
// Define routes
app . Get ( "/" , func ( c fiber. Ctx ) error {
return c . SendString ( "Trusted Proxy Configured!" )
})
log . Fatal ( app . Listen ( ":3000" ))
}これは、ファイバーフレームワークに含まれるミドルウェアのリストです。
| ミドルウェア | 説明 |
|---|---|
| アダプタ | ネット/HTTPハンドラーのコンバーターは、ファイバーリクエストハンドラーに出入りします。 |
| BasicAuth | HTTP基本認証を提供します。有効な資格情報の次のハンドラーと、欠落または無効な資格情報のために許可されていない401を呼び出します。 |
| キャッシュ | HTTP応答をインターセプトしてキャッシュします。 |
| 圧縮 | deflate 、 gzip 、 brotli 、 zstdのサポートを備えたファイバー用の圧縮ミドルウェア。 |
| cors | さまざまなオプションを使用して、クロスオリジンリソース共有(CORS)を有効にします。 |
| CSRF | CSRFエクスプロイトから保護します。 |
| アーリーダタ | TLS 1.3の初期データ(「0-RTT」)機能のサポートを追加します。 |
| 暗号化されています | Cookie値を暗号化するミドルウェアを暗号化します。 |
| envvar | オプションの構成を提供して、環境変数を公開します。 |
| etag | Webサーバーはコンテンツが変更されていない場合は完全な応答を再送信する必要がないため、キャッシュがより効率的になり、帯域幅を節約できます。 |
| expvar | JSON形式のHTTPサーバーランタイム公開変数を介して提供します。 |
| ファビコン | ログからファビコンを無視するか、ファイルパスが提供されている場合はメモリからサーブします。 |
| HealthCheck | 繊維の描写と準備プローブ。 |
| ヘルメット | さまざまなHTTPヘッダーを設定して、アプリを保護するのに役立ちます。 |
| iDempotency | 重複するリクエストがサーバー側で複数回実行された同じアクションを誤って引き起こさない障害耐性APIを可能にします。 |
| keyauth | キーベースの認証のサポートを追加します。 |
| リミッタ | 繊維にレート制限サポートを追加します。パスワードリセットなどのパブリックAPIおよび/またはエンドポイントへの繰り返しのリクエストを制限するために使用します。 |
| ロガー | HTTPリクエスト/応答ロガー。 |
| pprof | PPROF形式のランタイムプロファイリングデータを提供します。 |
| プロキシ | 複数のサーバーにリクエストをプロキシできます。 |
| 回復する | スタックチェーン内のどこでもパニックから回復し、コントロールを集中型エラーハンドラーに処理します。 |
| リダイレクト | ミドルウェアをリダイレクトします。 |
| requestid | すべてのリクエストにリクエストIDを追加します。 |
| リライト | 提供されたルールに基づいてURLパスを書き換えます。後方互換性や、よりクリーンでより説明的なリンクを作成するだけで役立ちます。 |
| セッション | セッションミドルウェア。注:このミドルウェアはストレージパッケージを使用しています。 |
| スキップ | 述語が真である場合は、ラップされたハンドラーをスキップするミドルウェアをスキップします。 |
| 静的 | 画像、 CSS 、 JavaScriptなどの静的ファイルを提供するファイバーの静的ミドルウェア。 |
| タイムアウト | リクエストの最大時間を追加し、それを超えた場合はエラーハンドラーに転送します。 |
外部でホストされているミドルウェアモジュールのリストとファイバーチームが維持します。
| ミドルウェア | 説明 |
|---|---|
| 貢献 | サードパーティのミドルウェア |
| ストレージ | さまざまなファイバーミドルウェアで使用するように設計されたストレージインターフェイスを実装する既成のストレージドライバー。 |
| テンプレート | このパッケージには、ファイバーv3で使用できる9つのテンプレートエンジンが含まれています。 GOバージョン1.23以上が必要です。 |
その他の記事、ミドルウェア、例、またはツールについては、素晴らしいリストを確認してください。
あなたがあなたに感謝したい場合、および/またはFiberの積極的な開発をサポートしたい場合:
貢献がプルリクエストの準備ができていることを確認するには、次のMakefileコマンドを使用してください。これらのツールは、コードの品質と一貫性を維持するのに役立ちます。
これらのコマンドを実行して、コードがプロジェクト標準とベストプラクティスに固執するようにします。
Fiberは、ドメイン名、GitBook、Netlify、ServerLessホスティングなどの請求書を支払うために寄付で実行されるオープンソースプロジェクトです。繊維をサポートしたい場合は、ここでコーヒーを購入できます。
| ユーザー | 寄付 | |
|---|---|---|
| @Destari | ☕x 10 | |
| @dembygenesis | ☕x 5 | |
| @thomasvvugt | ☕x 5 | |
| @hendratommy | ☕x 5 | |
| @ekaputra07 | ☕x 5 | |
| @jorgefuertes | ☕x 5 | |
| @candidosales | ☕x 5 | |
| @l0nax | ☕x 3 | |
| @bihe | ☕x 3 | |
| @justdave | ☕x 3 | |
| @koddr | ☕x 1 | |
| @lapolinar | ☕x 1 | |
| @diegowifi | ☕x 1 | |
| @ssimk0 | ☕x 1 | |
| @raymayemir | ☕x 1 | |
| @melkorm | ☕x 1 | |
| @marvinjwendt | ☕x 1 | |
| @toishy | ☕x 1 |
Copyright(c)2019-Present Fennyおよび貢献者。 Fiber 、MITライセンスの下でライセンスされている無料でオープンソースソフトウェアです。公式ロゴはVicShóstakによって作成され、Creative Commonsライセンス(CC BY-SA 4.0 International)の下で配布されました。