Fiber ist inspiriert vom beliebtesten Web-Framework Express im Internet. Wir kombinieren die Benutzerfreundlichkeit von Express und die Rohleistung von Go. Wenn Sie jemals eine Web-Anwendung mit Node.js (unter Verwendung von Express oder einem ähnlichen Framework) erstellt haben, sollten Ihnen viele Methoden und Prinzipien sehr vertraut sein.

Schnellstart

Installation

Stellen Sie sicher, dass Go 1.17 oder höher installiert ist.

Initialisieren Sie Ihr Projekt, indem Sie einen Ordner erstellen und innerhalb des Ordners go mod init github.com/your/repo ausführen. Installieren Sie dann Fiber mit dem go get-Befehl:

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

Hallo Welt

package main

// Importieren des Fiber-Pakets
import "github.com/gofiber/fiber/v2"

func main() {
    // Definieren der Fiber-App
    app := fiber.New()

    // Definieren der HTTP-Route
    app.Get("/", func(c *fiber.Ctx) error {
        // Geben Sie "Hallo, Welt ?!" als Zeichenfolge zurück
        return c.SendString("Hallo, Welt ?!")
    })

    // Auf Port 3000 hören
    app.Listen(":3000")
}

Zugriff über: http://localhost:3000/

Grundlegende Routenführung

Fiber Beispiel für grundlegende Routenführung

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("? Von: %s, Nach: %s", c.Params("from"), c.Params("to"))
        return c.SendString(msg) // => ? Von: LAX, Nach: 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 ist %s Jahre alt", c.Params("name"), c.Params("age"))
        return c.SendString(msg) // => ? john ist 75 Jahre alt
    })

    // GET /john
    app.Get("/:name", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("Hallo, %s ?!", c.Params("name"))
        return c.SendString(msg) // => Hallo john ?!
    })

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

Bereitstellung statischer Dateien

Einrichten der Bereitstellung statischer Dateien

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

Middleware

Verbessern Sie die Fähigkeit zur Behandlung von HTTP-Anfragen durch Middleware.

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

    // Jede Route abgleichen, hier Middleware mit einer Closure-Funktion anpassen
    app.Use(func(c *fiber.Ctx) error {
        fmt.Println("? Erster Handler")
        // Fortfahren, um die nächste Middleware- oder Routinenfunktion zu behandeln
        return c.Next()
    })

    // Routen, die mit /api beginnen, abgleichen
    app.Use("/api", func(c *fiber.Ctx) error {
        fmt.Println("? Zweiter Handler")
        return c.Next()
    })
    
    // Die integrierte Middleware zur Behandlung von Ausnahmen verwenden
    app.Use(recover.New())

    // GET /api/register
    app.Get("/api/list", func(c *fiber.Ctx) error {
        fmt.Println("? Letzter Handler")
        return c.SendString("Hallo, Welt ?!")
    })

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

Template Engine

Wenn der Template-Engine nicht festgelegt ist, verwendet Fiber standardmäßig html/template.

package main

import (
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/template/pug"
)

func main() {
    // Setze die Template-Engine
    app := fiber.New(fiber.Config{
        Views: pug.New("./views", ".pug"),
    })

    app.Get("/", func(c *fiber.Ctx) error {
        // Rendere das Template ./views/home.pug unter Verwendung von fiber.map Template-Parametern
        return c.Render("home", fiber.Map{
            "title": "Startseite",
            "year":  1999,
        })
    })

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

Cross-Origin Resource Sharing (CORS) Middleware

Middleware für CORS in Fiber, ermöglicht das Cross-Origin-Ressourcenaustausch mit verschiedenen Optionen, um CORS-Angriffe zu verhindern.

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

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

    // Standard-CORS-Konfiguration
    app.Use(cors.New())

    // Oder passe die CORS-Parameter an, um Anfragen von bestimmten Domains zuzulassen
    app.Use(cors.New(cors.Config{
        AllowOrigins: "https://www.tizi365.com, https://tizi365.com",
        AllowHeaders:  "Origin, Content-Type, Accept",
    }))

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

Überprüfe CORS, indem du eine beliebige Domain im Origin-Header übergibst:

curl -H "Origin: https://www.tizi365.com" --verbose http://localhost:3000

Benutzerdefinierte 404-Antwort

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

    app.Static("/", "./public")

    app.Get("/demo", func(c *fiber.Ctx) error {
        return c.SendString("Dies ist eine Demo!")
    })

    app.Post("/register", func(c *fiber.Ctx) error {
        return c.SendString("Willkommen!")
    })

    // Das zuletzt referenzierte Middleware wird alle Anfragen abgleichen, einschließlich 404
    app.Use(func(c *fiber.Ctx) error {
        // Andere Verarbeitungslogik
        // Gib den Status 404 zurück
        return c.SendStatus(404)
        // => 404 "Nicht gefunden"
    })

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

JSON-Antwort

Beispiel für Fiber, das JSON-Daten zurückgibt.

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": "Hallo John!",
        })
        // => {"success":true, "message":"Hallo John!"}
    })

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

Wiederherstellungs-Middleware

Abfange Panikfehler, um Programmabsturz und -beendigung zu verhindern.

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

func main() {
    app := fiber.New()
	// Verwende das Panic-Middleware, um Panik-Ausnahmen abzufangen
    app.Use(recover.New())

    app.Get("/", func(c *fiber.Ctx) error {
        panic("normalerweise würde das Ihre App abstürzen lassen")
    })

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

Benchmark

[

Beschränkungen

  • Aufgrund der Verwendung von unsicheren Funktionen in Fiber kann es mit den neuesten Go-Versionen inkompatibel sein. Fiber 2.40.0 wurde mit Go-Versionen 1.17 bis 1.21 getestet.
  • Fiber ist nicht kompatibel mit der net/http-Schnittstelle. Das bedeutet, dass Projekte wie gqlgen, go-swagger oder andere Projekte aus dem net/http-Ökosystem nicht direkt verwendet werden können.