Fiber, internetin en popüler Web çatısı Expressten esinlenmiştir. Expressin 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.