Fiber ইন্টারনেটে সবচেয়ে জনপ্রিয় Web ফ্রেমওয়ার্ক Express থেকে প্রার্থিত। আমরা Express এর ব্যবহারযোগ্যতা এবং Go এর প্রাথমিক কার্যক্ষমতা কে একসাথে করেছি। যদি আপনি আগে কখনো Node.js (Express বা এর মতো ফ্রেমওয়ার্ক ব্যবহার করে) দিয়ে Web অ্যাপ্লিকেশন তৈরি করেছেন, তাহলে অনেক ধরনের পদ্ধতি এবং নীতি আপনার জন্য খুব সহজ বোঝা উচিত।

তাড়াতাড়ি শুরু করুন

ইনস্টলেশন

নিশ্চিত হন যে আপনার কাছে গো 1.17 বা তার উপরের সংস্করণ ইনস্টল আছে।

আপনার প্রকল্প আমার বা আপনার পুনরায় চলানোর জন্য একটি ফোল্ডার তৈরি করুন এবং ফোল্ডারে যান, তারপর গিয়ে go get কমান্ড ব্যবহার করে Fiber ইনস্টল করুন:

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

হেলো ওয়ার্ল্ড

package main

// Fiber প্যাকেজ ইম্পোর্ট করুন
import "github.com/gofiber/fiber/v2"

func main() {
    // Fiber অ্যাপ সংজ্ঞায়িত করুন
    app := fiber.New()

    // এইচটিটিপি রাউট সংজ্ঞায়িত করুন
    app.Get("/", func(c *fiber.Ctx) error {
        // স্ট্রিং হিসেবে হ্যালো ওয়ার্ল্ড ফিরিয়ে দিন
        return c.SendString("হ্যালো, বিশ্ব ?!")
    })

    // ৩০০০ নম্বর পোর্টে শুনুন
    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) // => ✋ রেজিস্টার
    })

    // 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) // => ? অভিধান.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 বছর 75
    })

    // GET /john
    app.Get("/:name", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("হ্যালো, %s ?!", c.Params("name"))
        return c.SendString(msg) // => হ্যালো 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"))
}

মিডওয়েয়ার

এইচটিটিপি অনুরোধ হ্যান্ডল করার দক্ষতা বাড়াতে মিডওয়েয়ারের মাধ্যমে।

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

    // যেকোন রুটের সাথে ম্যাচ, এখানে একটি ক্লোজার ফাংশন ব্যবহার করে মিডওয়েয়ার কাস্টমাইজ করুন
    app.Use(func(c *fiber.Ctx) error {
        fmt.Println("? প্রথম হ্যান্ডলার")
        // অগ্রসর হতে অগ্রসর মিডওয়েয়ার বা রুট ফাংশন হ্যান্ডল করা যাবে
        return c.Next()
    })

    // /api দিয়ে শুরু হওয়া রুটের ম্যাচ
    app.Use("/api", func(c *fiber.Ctx) error {
        fmt.Println("? দ্বিতীয় হ্যান্ডলার")
        return c.Next()
    })
    
    // অসুবিধার ব্যবহারের জন্য ইনবিল্ট মিডওয়েয
### টেমপ্লেট ইঞ্জিন

যদি টেমপ্লেট ইঞ্জিন সেট না করা হয়, `Fiber` ডিফল্ট হিসেবে [html/template](https://pkg.go.dev/html/template) ব্যবহার করে।

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

ক্রস-অরিজিন রিসোর্স শেয়ারিং (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 "না পাওয়া গেছে"
    })

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

JSON রেসপন্স

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": "হাই জন!",
        })
        // => {"success":true, "message":"হাই জন!"}
    })

    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, বা অন্য যেকোনো প্রকল্প ব্যবহার করতে পারবেন না।