Fiber terinspirasi oleh kerangka kerja Web paling populer Express di Internet. Kami menggabungkan kemudahan penggunaan dari Express dan kinerja tinggi dari Go. Jika Anda pernah membangun aplikasi Web menggunakan Node.js (menggunakan Express atau kerangka kerja serupa), maka banyak metode dan prinsip seharusnya sangat mudah dipahami untuk Anda.

Memulai Cepat

Instalasi

Pastikan Anda telah menginstal Go 1.17 atau yang lebih tinggi.

Inisialisasi proyek Anda dengan membuat folder dan menjalankan go mod init github.com/your/repo di dalam folder, lalu pasang Fiber menggunakan perintah go get:

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

Hello World

package main

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

func main() {
    // Tentukan aplikasi fiber
    app := fiber.New()

    // Tentukan rute http
    app.Get("/", func(c *fiber.Ctx) error {
        // Mengembalikan hello world sebagai string
        return c.SendString("Halo, Dunia ?!")
    })

    // Dengarkan di port 3000
    app.Listen(":3000")
}

Akses melalui: http://localhost:3000/

Perutean Dasar

Contoh perutean dasar 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("? Dari: %s, Ke: %s", c.Params("from"), c.Params("to"))
        return c.SendString(msg) // => ? Dari: LAX, Ke: 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) // => ? kamus.txt
    })

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

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

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

Menyajikan Berkas Statis

Mengatur penyajian berkas statis

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"))
}

Middleware

Meningkatkan kemampuan untuk menangani permintaan HTTP melalui middleware.

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

    // Padankan setiap rute, di sini menyesuaikan middleware menggunakan fungsi penutup
    app.Use(func(c *fiber.Ctx) error {
        fmt.Println("? Penangan pertama")
        // Lanjutkan penanganan middleware atau fungsi rute berikutnya
        return c.Next()
    })

    // Padankan rute yang dimulai dengan /api
    app.Use("/api", func(c *fiber.Ctx) error {
        fmt.Println("? Penangan kedua")
        return c.Next()
    })
    
    // Gunakan middleware bawaan untuk menangani pengecualian
    app.Use(recover.New())

    // GET /api/register
    app.Get("/api/list", func(c *fiber.Ctx) error {
        fmt.Println("? Penangan terakhir")
        return c.SendString("Halo, Dunia ?!")
    })

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

Mesin Template

Jika mesin template tidak diatur, Fiber secara default menggunakan html/template.

package main

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

func main() {
    // Atur mesin template
    app := fiber.New(fiber.Config{
        Views: pug.New("./views", ".pug"),
    })

    app.Get("/", func(c *fiber.Ctx) error {
        // Render template ./views/home.pug menggunakan parameter template fiber.Map
        return c.Render("home", fiber.Map{
            "title": "Beranda",
            "year":  1999,
        })
    })

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

Middleware Pem Sharing Sumber Daya Cross-Origin (CORS)

Middleware untuk CORS di Fiber, dapat mengaktifkan pembagian sumber daya lintas domain dengan berbagai opsi untuk mencegah serangan CORS.

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

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

    // Konfigurasi CORS default
    app.Use(cors.New())

    // Atau sesuaikan parameter CORS untuk mengizinkan permintaan dari domain tertentu
    app.Use(cors.New(cors.Config{
        AllowOrigins: "https://www.tizi365.com, https://tizi365.com",
        AllowHeaders:  "Origin, Content-Type, Accept",
    }))

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

Periksa CORS dengan melewatkan domain apa pun dalam header Origin:

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

Respon 404 Kustom

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

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

    app.Get("/demo", func(c *fiber.Ctx) error {
        return c.SendString("Ini adalah demo!")
    })

    app.Post("/register", func(c *fiber.Ctx) error {
        return c.SendString("Selamat datang!")
    })

    // Middleware yang terakhir dirujuk akan cocok dengan semua permintaan, termasuk 404
    app.Use(func(c *fiber.Ctx) error {
        // Logika penanganan lain
        // Mengembalikan status 404
        return c.SendStatus(404)
        // => 404 "Not Found"
    })

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

Respon JSON

Contoh Fiber mengembalikan data 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": "Hai John!",
        })
        // => {"success":true, "message":"Hai John!"}
    })

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

Middleware Pemulihan

Mencegah kesalahan panic untuk mencegah kegagalan dan keluar dari program.

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

func main() {
    app := fiber.New()
	// Gunakan middleware panic untuk menangkap pengecualian panic
	app.Use(recover.New())

    app.Get("/", func(c *fiber.Ctx) error {
        panic("biasanya ini akan membuat aplikasi Anda crash")
    })

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

Benchmark

[

Batasan

  • Karena penggunaan fitur yang tidak aman dalam Fiber, mungkin tidak kompatibel dengan versi Go terbaru. Fiber 2.40.0 telah diuji pada versi Go 1.17 hingga 1.21.
  • Fiber tidak kompatibel dengan antarmuka net/http. Artinya, Anda tidak dapat langsung menggunakan proyek-proyek seperti gqlgen, go-swagger, atau proyek lain yang termasuk dalam ekosistem net/http.