Fiber được truyền cảm hứng từ framework Express phổ biến nhất trên Internet. Chúng tôi kết hợp tính dễ sử dụng của Expresshiệu suất tốt của Go. Nếu bạn đã từng xây dựng ứng dụng Web bằng Node.js (sử dụng Express hoặc framework tương tự), thì rất nhiều phương pháp và nguyên tắc sẽ rất dễ hiểu với bạn.

Bắt đầu nhanh

Cài đặt

Hãy đảm bảo bạn đã cài đặt Go 1.17 trở lên.

Khởi tạo dự án của bạn bằng cách tạo một thư mục và chạy lệnh go mod init github.com/your/repo trong thư mục đó, sau đó cài đặt Fiber bằng lệnh go get:

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

Xin chào Thế Giới

package main

// Nhập gói fiber
import "github.com/gofiber/fiber/v2"

func main() {
    // Định nghĩa ứng dụng fiber
    app := fiber.New()

    // Định nghĩa route http
    app.Get("/", func(c *fiber.Ctx) error {
        // Trả về chuỗi "Hello, World ?!"
        return c.SendString("Xin chào, Thế Giới ?!")
    })

    // Lắng nghe trên cổng 3000
    app.Listen(":3000")
}

Truy cập qua: http://localhost:3000/

Định tuyến Cơ bản

Ví dụ về định tuyến cơ bản của 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("? Từ: %s, Đến: %s", c.Params("from"), c.Params("to"))
        return c.SendString(msg) // => ? Từ: LAX, Đến: 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 tuổi", c.Params("name"), c.Params("age"))
        return c.SendString(msg) // => ? john is 75 tuổi
    })

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

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

Phục vụ Tập tin Tĩnh

Cấu hình phục vụ tập tin tĩnh

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

Tăng cường khả năng xử lý yêu cầu HTTP thông qua middleware.

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

    // Khớp với bất kỳ route nào, ở đây tùy chỉnh middleware bằng cách sử dụng một hàm gói ghém (closure)
    app.Use(func(c *fiber.Ctx) error {
        fmt.Println("? Xử lý đầu tiên")
        // Tiếp tục xử lý middleware hoặc hàm route kế tiếp
        return c.Next()
    })

    // Khớp với các route bắt đầu bằng /api
    app.Use("/api", func(c *fiber.Ctx) error {
        fmt.Println("? Xử lý thứ hai")
        return c.Next()
    })
    
    // Sử dụng middleware tích hợp sẵn để xử lý ngoại lệ
    app.Use(recover.New())

    // GET /api/register
    app.Get("/api/list", func(c *fiber.Ctx) error {
        fmt.Println("? Xử lý cuối cùng")
        return c.SendString("Xin chào, Thế Giới ?!")
    })

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

Bộ Động Cơ Mẫu

Nếu bộ động cơ mẫu không được thiết lập, Fiber mặc định sử dụng html/template.

package main

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

func main() {
    // Thiết lập bộ động cơ mẫu
    app := fiber.New(fiber.Config{
        Views: pug.New("./views", ".pug"),
    })

    app.Get("/", func(c *fiber.Ctx) error {
        // Render bộ mẫu ./views/home.pug bằng cách sử dụng các tham số mẫu fiber.map
        return c.Render("home", fiber.Map{
            "title": "Trang chủ",
            "year":  1999,
        })
    })

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

Phần Mềm Trung Gian Chia Sẻ Tài Nguyên (CORS)

Phần mềm trung gian cho CORS trong Fiber, có thể kích hoạt chia sẻ tài nguyên gốc với các tùy chọn khác nhau để ngăn chặn các cuộc tấn công CORS.

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

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

    // Cấu hình CORS mặc định
    app.Use(cors.New())

    // Hoặc tùy chỉnh tham số CORS để cho phép yêu cầu từ một số miền nhất định
    app.Use(cors.New(cors.Config{
        AllowOrigins: "https://www.tizi365.com, https://tizi365.com",
        AllowHeaders:  "Origin, Content-Type, Accept",
    }))

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

Kiểm tra CORS bằng cách chuyển bất kỳ miền nào trong tiêu đề Origin:

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

Phản Hồi 404 Tùy Chỉnh

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

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

    app.Get("/demo", func(c *fiber.Ctx) error {
        return c.SendString("Đây là bản demo!")
    })

    app.Post("/register", func(c *fiber.Ctx) error {
        return c.SendString("Chào mừng!")
    })

    // Các đoạn trung gian cuối cùng sẽ khớp với tất cả các yêu cầu, bao gồm cả 404
    app.Use(func(c *fiber.Ctx) error {
        // Logic xử lý khác
        // Trả về trạng thái 404
        return c.SendStatus(404)
        // => 404 "Không tìm thấy"
    })

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

Phản Hồi JSON

Ví dụ về Fiber trả về dữ liệu 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": "Xin chào John!",
        })
        // => {"success":true, "message":"Xin chào John!"}
    })

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

Phần Mềm Trung Gian Khôi Phục

Chặn lỗi panic để ngăn chương trình bị sập và thoát.

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

func main() {
    app := fiber.New()
	// Sử dụng phần mềm trung gian panic để chặn các ngoại lệ panic
    app.Use(recover.New())

    app.Get("/", func(c *fiber.Ctx) error {
        panic("thông thường điều này sẽ làm sập ứng dụng của bạn")
    })

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

Sự đo lường

[

Hạn chế

  • Do sử dụng các tính năng không an toàn trong Fiber, có thể không tương thích với các phiên bản Go mới nhất. Fiber 2.40.0 đã được kiểm tra trên các phiên bản Go từ 1.17 đến 1.21.
  • Fiber không tương thích với giao diện net/http. Điều này có nghĩa là bạn không thể trực tiếp sử dụng các dự án như gqlgen, go-swagger, hoặc bất kỳ dự án nào khác thuộc hệ sinh thái net/http.