فائبر انٹرنیٹ پر سب سے مشہور ویب فریم ورک Express سے متاثر ہے۔ ہم Express کی استعمالیت اور Go کی فوری کارکردگی کو ملا کر فائبر بناتے ہیں۔ اگر آپ نے پہلے بھی Node.js کا استعمال کر کے (Express یا مشابہ فریم ورک کا استعمال کر کے) کسی ویب ایپلیکیشن کو بنایا ہے تو بہت سے تراکیب اور اصول آپ کے لئے بہت آسان سمجھنے کے لئے ہوں گے۔

تیز شروعات

انسٹالیشن

یقینی بنائیں کہ آپ کے پاس Go 1.17 یا اس سے زیادہ ہائی ورژن انسٹال ہے۔

پروجیکٹ کو شروع کرنے کے لئے ایک فولڈر بنائیں اور اس فولڈر میں جا کر go mod init github.com/your/repo کمانڈ کو چلا کر اپنا پروجیکٹ شروع کریں، پھر go get کمانڈ کا استعمال کر کے فائبر کو انسٹال کریں۔

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

ہیلو ورلڈ

package main

// فائبر پیکیج کو امپورٹ کریں
import "github.com/gofiber/fiber/v2"

func main() {
    // فائبر ایپ پر تعریف کریں
    app := fiber.New()

    // ہمکوچہ http روٹ کو تعریف کریں
    app.Get("/", func(c *fiber.Ctx) error {
        // سٹرنگ کے طور پر ہیلو ورلڈ واپس بھیجیں
        return c.SendString("ہیلو دنیا!")
    })

    // پورٹ 3000 پر سننا شروع کریں
    app.Listen(":3000")
}

دسترس: http://localhost:3000/

بنیادی راستہ

فائبر کا بنیادی راستہ مثال

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("? سے: %s, تک: %s", c.Params("from"), c.Params("to"))
        return c.SendString(msg) // => ? سے: LAX, تک: 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 کی عمر %s سال ہے", c.Params("name"), c.Params("age"))
        return c.SendString(msg) // => ? جان 75 سال کی عمر ہے
    })

    // GET /john
    app.Get("/:name", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("ہیلو، %s ?!", c.Params("name"))
        return c.SendString(msg) // => ہیلو جان ?!
    })

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

مڈیل ویئر

مڈیل ویئر کے ذریعہ HTTP ریکویسٹس کو ہینڈل کرنے کی صلاحیت کو بڑھائیں۔

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()
    })
    
    // استثنائیتس کو ہینڈل کرنے کے لئے تیار شدہ مدد کار مڈیل ویئر کا استعمال کریں
    app.Use(recover.New())

    // GET /api/register
    app.Get("/api/list", func(c *fiber.Ctx) error {
        fmt.Println("? آخری ہینڈلر")
        return c.SendString("ہیلو دنیا ?!")
    })

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

ٹیمپلیٹ انجن

اگر ٹیمپلیٹ انجن سیٹ نہ کیا گیا ہو تو Fiber html/template کا استعمال کرتا ہے۔

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 {
        // ٹیمپلیٹ پیرامیٹرز کا استعمال کرتے ہوئے ./views/home.pug ٹیمپلیٹ رینڈر کریں
        return c.Render("home", fiber.Map{
            "title": "ہوم پیج",
            "year":  1999,
        })
    })

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

کراس-اصل مستند اشتراک (CORS) مڈل وئیر

Fiber میں کراس-اصل مستند اشتراک کے لیے مڈل وئیر، کئی آپشنز کے ساتھ کراس-اصل مستند کی اشتراک کو منع کرنے کے لیے استعمال کیا جا سکتا ہے۔

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

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

    // ڈیفالٹ CORS تشکیل
    app.Use(cors.New())

    // یا ترجیحات کی تشکیل کریں کہ کسی مخصوص ڈومینز سے درخواستوں کی اجازت دے
    app.Use(cors.New(cors.Config{
        AllowOrigins: "https://www.tizi365.com, https://tizi365.com",
        AllowHeaders:  "Origin, Content-Type, Accept",
    }))

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

اصل ہیڈر میں کوئی بھی ڈومین کو گزارتے ہوئے 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 ریسپانس

Fiber کا 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{"جان", 20})
        // => {"name":"جان", "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 کو گو ورژنز 1.17 سے 1.21 تک کے تجربات کی گئی ہیں۔
  • Fiber جدید Go ورژنز کے مطابقت نہیں رکھتا۔ یہ یہ مطلب ہے کہ آپ gqlgen، go-swagger، یا کسی بھی دیگر پروجیکٹس کا مستقیم استعمال نہیں کرسکتے جو net/http ماحول میں شامل ہیں۔