Fiber
, internetin en popüler Web
çatısı Express
ten esinlenmiştir. Express
in kullanılabilirliğini ve Go
'nun performansını bir araya getirdik. Daha önce Node.js
kullanarak (Express veya benzer bir çatı kullanarak) bir Web
uygulaması oluşturduysanız, pek çok yöntem ve prensip sizin için çok anlaşılır olmalı.
Hızlı Başlangıç
Kurulum
Go 1.17
veya daha yüksek sürümünü kurduğunuzdan emin olun.
Projenizi oluşturmak için bir klasör oluşturun ve klasör içinde go mod init github.com/your/repo
komutunu çalıştırarak projenizi başlatın, ardından go get
komutunu kullanarak Fiber'ı yükleyin:
go get -u github.com/gofiber/fiber/v2
Merhaba Dünya
package main
// fiber paketini içe aktarın
import "github.com/gofiber/fiber/v2"
func main() {
// Fiber uygulamasını tanımlayın
app := fiber.New()
// HTTP rotasını tanımlayın
app.Get("/", func(c *fiber.Ctx) error {
// Merhaba dünya dizgisini döndürün
return c.SendString("Merhaba, Dünya ?!")
})
// 3000 numaralı bağlantı noktasında dinleyin
app.Listen(":3000")
}
Erişim: http://localhost:3000/
Temel Yönlendirme
Fiber temel yönlendirme örneği
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("? Kaynak: %s, Hedef: %s", c.Params("from"), c.Params("to"))
return c.SendString(msg) // => ? Kaynak: LAX, Hedef: 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 yaşında %s", c.Params("name"), c.Params("age"))
return c.SendString(msg) // => ? john 75 yaşında
})
// GET /john
app.Get("/:name", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("Merhaba, %s ?!", c.Params("name"))
return c.SendString(msg) // => Merhaba john ?!
})
log.Fatal(app.Listen(":3000"))
}
Statik Dosyaların Sunulması
Statik dosya sunumunu yapılandırın
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"))
}
Ara Yazılım
HTTP isteklerini işleme yeteneğini artırın.
func main() {
app := fiber.New()
// Herhangi bir rota eşleşmesi, burada bir kapanış fonksiyonu kullanarak özelleştirilmiş ara yazılım
app.Use(func(c *fiber.Ctx) error {
fmt.Println("? İlk işleyici")
// Devam edin ve bir sonraki ara yazılımı veya rota işlevini işlemeye devam edin
return c.Next()
})
// /api ile başlayan rotaları eşleştirin
app.Use("/api", func(c *fiber.Ctx) error {
fmt.Println("? İkinci işleyici")
return c.Next()
})
// İstisnaları işlemek için yerleşik ara yazılımı kullanın
app.Use(recover.New())
// GET /api/register
app.Get("/api/list", func(c *fiber.Ctx) error {
fmt.Println("? Son işleyici")
return c.SendString("Merhaba, Dünya ?!")
})
log.Fatal(app.Listen(":3000"))
}
Şablon Motoru
Eğer şablon motoru belirlenmemişse, Fiber
, varsayılan olarak html/template kullanır.
package main
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/template/pug"
)
func main() {
// Şablon motorunu ayarla
app := fiber.New(fiber.Config{
Views: pug.New("./views", ".pug"),
})
app.Get("/", func(c *fiber.Ctx) error {
// fiber.map şablon parametreleri kullanarak ./views/home.pug şablonunu işle
return c.Render("home", fiber.Map{
"title": "Ana Sayfa",
"year": 1999,
})
})
log.Fatal(app.Listen(":3000"))
}
Cross-Origin Resource Sharing (CORS) Aracı
Fiber için CORS ("Cross-Origin Resource Sharing") için bir ara katman, CORS saldırılarını önlemek için çeşitli seçeneklerle cross-origin kaynak paylaşımını etkinleştirebilir.
import (
"log"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cors"
)
func main() {
app := fiber.New()
// Varsayılan CORS yapılandırması
app.Use(cors.New())
// Veya belirli domainlerden gelen isteklere izin vermek için CORS parametrelerini özelleştirin
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
başlığında herhangi bir domaini geçirerek CORS'u kontrol edin:
curl -H "Origin: https://www.tizi365.com" --verbose http://localhost:3000
Özel 404 Yanıtı
func main() {
app := fiber.New()
app.Static("/", "./public")
app.Get("/demo", func(c *fiber.Ctx) error {
return c.SendString("Bu bir demo!")
})
app.Post("/register", func(c *fiber.Ctx) error {
return c.SendString("Hoş geldiniz!")
})
// Son referans alınan ara katman tüm isteklerle, 404 dahil eşleşecektir
app.Use(func(c *fiber.Ctx) error {
// Diğer işleme mantığı
// 404 durumunu döndür
return c.SendStatus(404)
// => 404 "Bulunamadı"
})
log.Fatal(app.Listen(":3000"))
}
JSON Yanıtı
Fiber'ın JSON verisi döndürme örneği.
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": "Merhaba John!",
})
// => {"success":true, "message":"Merhaba John!"}
})
log.Fatal(app.Listen(":3000"))
}
Kurtarma Aracı
Program çökmesini ve sonlanmasını önlemek için panic hatalarını durduran bir ara katman.
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/recover"
)
func main() {
app := fiber.New()
// Panic istisnalarını durdurmka için panic orta katmanını kullan
app.Use(recover.New())
app.Get("/", func(c *fiber.Ctx) error {
panic("normalde bu uygulamanızı çökertecektir")
})
log.Fatal(app.Listen(":3000"))
}
Performans Testi
[
Kısıtlamalar
- Fiber'da güvenli olmayan özelliklerin kullanılmasından dolayı, en son Go sürümleri ile uyumsuz olabilir. Fiber 2.40.0, Go sürümleri 1.17'den 1.21'e kadar test edilmiştir.
- Fiber, net/http arabirimine uyumlu değildir. Bu, gqlgen, go-swagger gibi projeleri doğrudan kullanamayacağınız anlamına gelir veya net/http ekosistemine ait diğer projeleri.