فایبر
الهام گرفته شده از محبوبترین چهارچوب وب
به نام Express
در اینترنت است. ما کاربری از Express
و عملکرد خام از Go
را ترکیب کردهایم. اگر تاکنون برنامهای وب
با استفاده از Node.js
(استفاده از Express یا چارچوب مشابه) ساختهاید، بسیاری از روشها و اصول برای شما باید بسیار آسان قابل درک باشد.
شروع سریع
نصب
اطمینان حاصل کنید که Go 1.17
یا بالاتر نصب شده باشد.
پروژه خود را با ایجاد یک پوشه و اجرای دستور go mod init github.com/your/repo
داخل پوشه، مقداردهی اولیه کنید، سپس Fiber
را با استفاده از دستور go get
نصب کنید:
go get -u github.com/gofiber/fiber/v2
سلام دنیا
package main
// وارد کردن بسته fiber
import "github.com/gofiber/fiber/v2"
func main() {
// تعریف برنامه fiber
app := fiber.New()
// تعریف مسیر http
app.Get("/", func(c *fiber.Ctx) error {
// ارسال رشته "Hello, World ?!" به عنوان خروجی
return c.SendString("Hello, World ?!")
})
// گوش کردن به پورت 3000
app.Listen(":3000")
}
دسترسی از طریق: http://localhost:3000/
مسیریابی ابتدایی
نمونه مسیریابی ابتدایی Fiber
func main() {
app := fiber.New()
// دریافت /api/register
app.Get("/api/*", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("✋ %s", c.Params("*"))
return c.SendString(msg) // => ✋ register
})
// دریافت /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
})
// دریافت /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
})
// دریافت /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) // =>؟ john 75 ساله است.
})
// دریافت /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("? First handler")
// ادامه دادن به بررسی میانافزار بعدی یا تابع مسیر
return c.Next()
})
// مطابقت مسیرها با شروع /api
app.Use("/api", func(c *fiber.Ctx) error {
fmt.Println("? Second handler")
return c.Next()
})
// استفاده از میانافزار مدیریت استثناها
app.Use(recover.New())
// دریافت /api/register
app.Get("/api/list", func(c *fiber.Ctx) error {
fmt.Println("? Last handler")
return c.SendString("Hello, World ?!")
})
log.Fatal(app.Listen(":3000"))
}
موتور قالب
اگر موتور قالب تنظیم نشود، Fiber
به طور پیش فرض از html/template استفاده میکند.
بستهی اصلی
واردات (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/template/pug"
)
تابع اصلی() {
// تنظیم موتور قالب
app := fiber.New(fiber.Config{
Views: pug.New("./views", ".pug"),
})
app.Get("/", func(c *fiber.Ctx) error {
// رندر قالب ./views/home.pug با استفاده از پارامترهای قالب fiber.map
return c.Render("home", fiber.Map{
"title": "صفحه اصلی",
"year": 1999,
})
})
log.Fatal(app.Listen(":3000"))
}
میانافزار اشتراک منابع مبدا-چند دامنهای (CORS)
میانافزار برای CORS در Fiber، میتواند به اشتراکگذاری منابع بین دامنههای مختلف با گزینههای مختلف برای جلوگیری از حملات CORS کمک کند.
واردات (
"log"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cors"
)
تابع اصلی() {
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"))
}
بررسی CORS با ارسال هر دامنه در سربرگ Origin
:
curl -H "Origin: https://www.tizi365.com" --verbose http://localhost:3000
پاسخ سفارشی ۴۰۴
تابع اصلی() {
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("خوش آمدید!")
})
// آخرین میانافزار مورد اشاره، با درخواستها، شامل ۴۰۴ خواهد شد
app.Use(func(c *fiber.Ctx) error {
// منطق دیگر
// بازگشت وضعیت ۴۰۴
return c.SendStatus(404)
// => 404 "یافت نشد"
})
log.Fatal(app.Listen(":3000"))
}
پاسخ JSON
مثالی از Fiber برگرداندن داده JSON.
نوع کاربر struct {
Name string `json:"name"`
Age int `json:"age"`
}
تابع اصلی() {
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"))
}
میانافزار بازیابی
جلوگیری از برنامه کرش و خروج با انتزاع خطاهای پانیک.
واردات (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/recover"
)
تابع اصلی() {
app := fiber.New()
// استفاده از میانافزار پانیک برای انتزاع استثناهای پانیک
app.Use(recover.New())
app.Get("/", func(c *fiber.Ctx) error {
panic("معمولاً این باعث کرش کردن برنامه شما خواهد bشد")
})
log.Fatal(app.Listen(":3000"))
}
محدودیتها
- به دلیل استفاده از ویژگیهای ناامن در Fiber، ممکن است با آخرین نسخههای Go ناسازگار باشد. Fiber 2.40.0 بر روی نگارشهای Go 1.17 تا 1.21 آزمایش شده است.
- Fiber با رابط net/http سازگار نیست. این بدان معناست که نمیتوانید به طور مستقیم از پروژههایی مانند gqlgen، go-swagger، یا هر پروژه دیگری که به اکوسیستم net/http تعلق دارد، استفاده کنید.