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.