فائبر
انٹرنیٹ پر سب سے مشہور ویب
فریم ورک 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 ماحول میں شامل ہیں۔