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.