Fiber est inspiré du framework Express le plus populaire sur Internet. Nous combinons la facilité d'utilisation d'Express et les performances brutes de Go. Si vous avez déjà construit une application Web en utilisant Node.js (en utilisant Express ou un framework similaire), de nombreuses méthodes et principes devraient être très faciles à comprendre pour vous.
Démarrage rapide
Installation
Assurez-vous d'avoir Go 1.17 ou une version supérieure installée.
Initialisez votre projet en créant un dossier et en exécutant go mod init github.com/votre/repo à l'intérieur du dossier, puis installez Fiber en utilisant la commande go get :
go get -u github.com/gofiber/fiber/v2
Hello, World
package main
// Importez le package fiber
import "github.com/gofiber/fiber/v2"
func main() {
// Définissez l'application fiber
app := fiber.New()
// Définissez la route http
app.Get("/", func(c *fiber.Ctx) error {
// Retournez "Bonjour, le monde" en tant que chaîne de caractères
return c.SendString("Bonjour, le monde ?!")
})
// Écoutez sur le port 3000
app.Listen(":3000")
}
Accédez via : http://localhost:3000/
Routage de base
Exemple de routage de base de Fiber
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) // => ✋ enregistrer
})
// GET /flights/LAX-SFO
app.Get("/flights/:from-:to", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("? De : %s, À : %s", c.Params("from"), c.Params("to"))
return c.SendString(msg) // => ? De : LAX, À : 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) // => ? dictionnaire.txt
})
// GET /john/75
app.Get("/:name/:age/:gender?", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("? %s a %s ans", c.Params("name"), c.Params("age"))
return c.SendString(msg) // => ? john a 75 ans
})
// GET /john
app.Get("/:name", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("Bonjour, %s ?!", c.Params("name"))
return c.SendString(msg) // => Bonjour john ?!
})
log.Fatal(app.Listen(":3000"))
}
Fourniture de fichiers statiques
Configuration de la fourniture de fichiers statiques
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
Améliorez la capacité à gérer les requêtes HTTP à travers les middlewares.
func main() {
app := fiber.New()
// Correspond à n'importe quelle route, ici personnalisez le middleware en utilisant une fonction de fermeture
app.Use(func(c *fiber.Ctx) error {
fmt.Println("? Premier gestionnaire")
// Continuez à gérer le prochain middleware ou la fonction de routage
return c.Next()
})
// Correspond aux routes commençant par /api
app.Use("/api", func(c *fiber.Ctx) error {
fmt.Println("? Deuxième gestionnaire")
return c.Next()
})
// Utilisez le middleware intégré pour gérer les exceptions
app.Use(recover.New())
// GET /api/register
app.Get("/api/list", func(c *fiber.Ctx) error {
fmt.Println("? Dernier gestionnaire")
return c.SendString("Bonjour, le monde ?!")
})
log.Fatal(app.Listen(":3000"))
}
Moteur de template
Si le moteur de template n'est pas défini, Fiber utilise par défaut html/template.
package main
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/template/pug"
)
func main() {
// Définir le moteur de template
app := fiber.New(fiber.Config{
Views: pug.New("./views", ".pug"),
})
app.Get("/", func(c *fiber.Ctx) error {
// Rendre le template ./views/home.pug en utilisant les paramètres du template fiber.map
return c.Render("home", fiber.Map{
"title": "Page d'accueil",
"year": 1999,
})
})
log.Fatal(app.Listen(":3000"))
}
Middleware de partage des ressources inter-origines (CORS)
Un middleware pour CORS dans Fiber, qui peut activer le partage inter-origines des ressources avec diverses options pour prévenir les attaques CORS.
import (
"log"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cors"
)
func main() {
app := fiber.New()
// Configuration CORS par défaut
app.Use(cors.New())
// Ou personnaliser les paramètres CORS pour autoriser les requêtes à partir de certains domaines
app.Use(cors.New(cors.Config{
AllowOrigins: "https://www.tizi365.com, https://tizi365.com",
AllowHeaders: "Origin, Content-Type, Accept",
}))
log.Fatal(app.Listen(":3000"))
}
Vérifiez CORS en passant n'importe quel domaine dans l'en-tête Origin:
curl -H "Origin: https://www.tizi365.com" --verbose http://localhost:3000
Réponse 404 personnalisée
func main() {
app := fiber.New()
app.Static("/", "./public")
app.Get("/demo", func(c *fiber.Ctx) error {
return c.SendString("Ceci est une démo !")
})
app.Post("/register", func(c *fiber.Ctx) error {
return c.SendString("Bienvenue !")
})
// Le dernier middleware référencé correspondra à toutes les requêtes, y compris 404
app.Use(func(c *fiber.Ctx) error {
// Autre logique de gestion
// Renvoyer le statut 404
return c.SendStatus(404)
// => 404 "Non trouvé"
})
log.Fatal(app.Listen(":3000"))
}
Réponse JSON
Exemple de réponse JSON renvoyée par Fiber.
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": "Salut John!",
})
// => {"success":true, "message":"Salut John!"}
})
log.Fatal(app.Listen(":3000"))
}
Middleware de récupération
Intercepter les erreurs de panique pour empêcher le crash et la sortie du programme.
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/recover"
)
func main() {
app := fiber.New()
// Utiliser le middleware de panique pour intercepter les exceptions de panique
app.Use(recover.New())
app.Get("/", func(c *fiber.Ctx) error {
panic("normalement, cela ferait planter votre application")
})
log.Fatal(app.Listen(":3000"))
}
Benchmark
[
Limitations
- En raison de l'utilisation de fonctionnalités non sécurisées dans Fiber, il peut être incompatible avec les dernières versions de Go. Fiber 2.40.0 a été testé sur les versions de Go 1.17 à 1.21.
- Fiber n'est pas compatible avec l'interface net/http. Cela signifie que vous ne pouvez pas utiliser directement des projets tels que gqlgen, go-swagger, ou tout autre projet appartenant à l'écosystème net/http.