ゴーゴーファイバー入門


ゴーゴーファイバーとは


Fiber ウェブフレームワークExpress そして、それはノード開発者のために働くのに最適です.
それは上に構築されますFasthttp エンジンはこちらbenchmarks . また、メモリ割り当てのオーバーヘッドはかなり低い.例えば、この記事を書いている間だけ~16mb メモリの、驚くべきだった!
本稿では、ファイバーフレームワークの感触を得るために、非常に単純な模擬APIルートを実装しましょう
記事からのコードは、これで利用できますrepository

始める


go docsからバイナリをインストールすることで、システムに直接goをインストールできますhttps://golang.org/doc/install

(オプション)
個人的にはDockerを使うのが好きなので、システムに何もインストールする必要はありません
引っ張りましょうgolang ドッカーイメージ
docker pull golang
プロジェクトディレクトリ
mkdir go-mock-api
cd go-mock-api
今度は港を縛ります4000 そして、現在のディレクトリ(go project dir)をボリュームとしてマウントし、ゴランイメージを実行します
docker run -itd -p 4000:4000 --name golang -v "$(pwd):/app" golang
ランニングゴランコンテナに走りましょう
docker exec -it -w /app golang bash
これはゴングDockerイメージに私たちをドロップする必要があります.さあ、goのバージョンをチェックして
go version
注: Dockerを使用している場合、以下の手順はGolangコンテナ内で実行されます

インストール


初期化するapi モジュール
go mod init api
インストールファイバー
go get -u github.com/gofiber/fiber/v2
つくりましょうapi.go ポートのサンプルHello World Serverで4000 リポジトリのREADMEに示すように.
package main

import "github.com/gofiber/fiber/v2"

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

    app.Get("/", func(ctx *fiber.Ctx) error {
        return ctx.SendString("Hello, World!")
    })

    app.Listen(":4000")
}

開発


Reflex 開発のための素晴らしいアプリケーションのライブリロードを支援します.それはとても似ているnodemon , あるいは、単に使用することができますgo run プログラムを実行するコマンド.
go get github.com/cespare/reflex
始めましょう!
reflex -g '*.go' go run api.go --start-service
Starting service...

 ┌───────────────────────────────────────────────────┐ 
 │                   Fiber v2.13.0                   │ 
 │               http://127.0.0.1:4000               │ 
 │       (bound on host 0.0.0.0 and port 4000)       │ 
 │                                                   │ 
 │ Handlers ............. 2  Processes ........... 1 │ 
 │ Prefork ....... Disabled  PID .............. 3315 │ 
 └───────────────────────────────────────────────────┘ 
注:確認してくださいPATH あなたの輸出.bashrc or .zshrc ファイル名export PATH=$PATH:$HOME/go/bin/今すぐあなたのコードを実行している必要がありますし、自動再ロードするときに再プログラムを実行することなく何かを変更する必要があります!

GETルートの作成


繊維を輸入しましょう
import "github.com/gofiber/fiber/v2"
加えるuser 主関数へのルート
app.Get("/user", getUserHandler)
を加えましょうgetUserHandler を返します.ここでは、模擬ユーザーを返します.
type User struct {
    Name    string `json:"name"`
    Twitter string `json:"twitter"`
}

func getUserHandler(ctx *fiber.Ctx) error {
    user := User{
        Name:    "Karan",
        Twitter: "karan_6864",
    }

    return ctx.Status(fiber.StatusOK).JSON(user)
}

ポストルートの作成


同様に、Aを加えましょうpost 主関数へのルート
    app.Post("/user/create", createUserHandler)
を加えましょうcreateUserHandler を返します.ここで、我々は単に体を解析して、反応でそれを送り返します
func createUserHandler(ctx *fiber.Ctx) error {
    body := new(User)
    err := ctx.BodyParser(body)

    if err != nil {
        ctx.Status(fiber.StatusBadRequest)
        return err
    }

    user := User{
        Name:    body.Name,
        Twitter: body.Twitter,
    }

    return ctx.Status(fiber.StatusOK).JSON(user)
}

ミドルウェア


繊維が付属したログオンミドルウェアを追加しましょう
import (
    "github.com/gofiber/fiber/v2/middleware/logger"
)
このミドルウェアをmain 機能
app.Use(logger.New())
これは以下に示すようにログを与えます
12:04:01 | 200 |     1ms |      172.17.0.1 | GET     | /user           
12:04:27 | 200 |      0s |      172.17.0.1 | POST    | /user/create   
また、カスタムミドルウェアを定義することができます
    app.Use(func(ctx *fiber.Ctx) error {
        fmt.Println("Sample middleware")
        return ctx.Next()
    })

ルータ


我々のルートを整理することができますGroup 関数は、どのように我々は非常に似てrouting 急行.
    userApi := app.Group("/user")

    userApi.Get("/", getUserHander)

    userApi.Post("/create", createUserHandler)

静的ファイルの提供


サーバにしようとしましょうpublic フォルダは、我々は単に使用することができますStatic 以下の関数
app.Static("/", "./public")

それを試してみましょう!


こちらがファイナルapi.go
package main

import (
    "fmt"

    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/logger"
)

type User struct {
    Name    string `json:"name"`
    Twitter string `json:"twitter"`
}

func getUserHander(ctx *fiber.Ctx) error {
    user := User{
        Name:    "Karan",
        Twitter: "karan_6864",
    }

    return ctx.Status(fiber.StatusOK).JSON(user)
}

func createUserHandler(ctx *fiber.Ctx) error {
    body := new(User)
    err := ctx.BodyParser(body)

    if err != nil {
        fmt.Println(err)
        ctx.Status(fiber.StatusBadRequest)
        return err
    }

    user := User{
        Name:    body.Name,
        Twitter: body.Twitter,
    }

    return ctx.Status(fiber.StatusOK).JSON(user)
}

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

    app.Use(logger.New())

    userApi := app.Group("/user")

    userApi.Get("/", getUserHander)

    userApi.Post("/create", createUserHandler)

    app.Listen(":4000")
}
使っているInsomnia 模擬終点をテストするには
ユーザを得る

ユーザーの作成

あなたがどんな問題にでも直面するならば、私に達することを感じてください.
フィードバックは常に歓迎され、楽しい時を過す!