Fiber
si ispira al framework Web
più popolare Express
su Internet. Abbiamo combinato la usabilità di Express
e le prestazioni grezze di Go
. Se hai mai costruito un'applicazione Web
utilizzando Node.js
(usando Express o un framework simile), allora molti metodi e principi dovrebbero essere molto facili da capire per te.
Avvio rapido
Installazione
Assicurati di avere installato Go 1.17
o successivo.
Inizializza il tuo progetto creando una cartella ed eseguendo go mod init github.com/your/repo
all'interno della cartella, quindi installa Fiber usando il comando go get
:
go get -u github.com/gofiber/fiber/v2
Ciao, mondo
package main
// Importa il pacchetto fiber
import "github.com/gofiber/fiber/v2"
func main() {
// Definisci l'applicazione fiber
app := fiber.New()
// Definisci il percorso http
app.Get("/", func(c *fiber.Ctx) error {
// Restituisci hello world come stringa
return c.SendString("Ciao, Mondo ?!")
})
// Ascolta sulla porta 3000
app.Listen(":3000")
}
Accesso tramite: http://localhost:3000/
Routing di base
Esempio di routing di base di 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) // => ✋ register
})
// GET /flights/LAX-SFO
app.Get("/flights/:from-:to", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("? Da: %s, A: %s", c.Params("from"), c.Params("to"))
return c.SendString(msg) // => ? Da: LAX, A: 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 ha %s anni", c.Params("name"), c.Params("age"))
return c.SendString(msg) // => ? john ha 75 anni
})
// GET /john
app.Get("/:name", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("Ciao, %s ?!", c.Params("name"))
return c.SendString(msg) // => Ciao john ?!
})
log.Fatal(app.Listen(":3000"))
}
Servire file statici
Configurare il servizio di file statici
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/qualunque/percorso/mostra/index/html
log.Fatal(app.Listen(":3000"))
}
Middleware
Migliora la capacità di gestire le richieste HTTP attraverso i middleware.
func main() {
app := fiber.New()
// Corrispondenza con qualsiasi percorso, qui personalizza il middleware utilizzando una funzione di chiusura
app.Use(func(c *fiber.Ctx) error {
fmt.Println("? Primo gestore")
// Continua a gestire il middleware successivo o la funzione di percorso
return c.Next()
})
// Corrispondenza con i percorsi che iniziano con /api
app.Use("/api", func(c *fiber.Ctx) error {
fmt.Println("? Secondo gestore")
return c.Next()
})
// Utilizza il middleware integrato per gestire le eccezioni
app.Use(recover.New())
// GET /api/register
app.Get("/api/list", func(c *fiber.Ctx) error {
fmt.Println("? Ultimo gestore")
return c.SendString("Ciao, Mondo ?!")
})
log.Fatal(app.Listen(":3000"))
}
Motore del template
Se il motore del template non è impostato, Fiber
di default utilizza html/template.
package main
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/template/pug"
)
func main() {
// Imposta il motore del template
app := fiber.New(fiber.Config{
Views: pug.New("./views", ".pug"),
})
app.Get("/", func(c *fiber.Ctx) error {
// Rendi il template ./views/home.pug utilizzando i parametri del template fiber.map
return c.Render("home", fiber.Map{
"title": "Homepage",
"year": 1999,
})
})
log.Fatal(app.Listen(":3000"))
}
Middleware per la condivisione delle risorse cross-origin (CORS)
Middleware per CORS in Fiber, può abilitare la condivisione delle risorse cross-origin con varie opzioni per prevenire attacchi CORS.
import (
"log"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cors"
)
func main() {
app := fiber.New()
// Configurazione predefinita di CORS
app.Use(cors.New())
// Oppure personalizza i parametri CORS per consentire le richieste da determinati domini
app.Use(cors.New(cors.Config{
AllowOrigins: "https://www.tizi365.com, https://tizi365.com",
AllowHeaders: "Origin, Content-Type, Accept",
}))
log.Fatal(app.Listen(":3000"))
}
Controlla CORS passando qualsiasi dominio nell'header Origin
:
curl -H "Origin: https://www.tizi365.com" --verbose http://localhost:3000
Risposta personalizzata 404
func main() {
app := fiber.New()
app.Static("/", "./public")
app.Get("/demo", func(c *fiber.Ctx) error {
return c.SendString("Questo è un demo!")
})
app.Post("/register", func(c *fiber.Ctx) error {
return c.SendString("Benvenuto!")
})
// L'ultimo middleware referenziato corrisponderà a tutte le richieste, inclusi i 404
app.Use(func(c *fiber.Ctx) error {
// Altra logica di gestione
// Restituisci lo stato 404
return c.SendStatus(404)
// => 404 "Non trovato"
})
log.Fatal(app.Listen(":3000"))
}
Risposta JSON
Esempio di Fiber che restituisce dati JSON.
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": "Ciao John!",
})
// => {"success":true, "message":"Ciao John!"}
})
log.Fatal(app.Listen(":3000"))
}
Middleware di ripristino
Intercetta errori di panic per prevenire il crash e l'uscita del programma.
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/recover"
)
func main() {
app := fiber.New()
// Utilizza il middleware di panic per intercettare le eccezioni di panic
app.Use(recover.New())
app.Get("/", func(c *fiber.Ctx) error {
panic("normalmente questo farebbe crashare la tua app")
})
log.Fatal(app.Listen(":3000"))
}
Test di prestazioni
[
Limitazioni
- A causa dell'uso di funzionalità non sicure in Fiber, potrebbe non essere compatibile con le ultime versioni di Go. Fiber 2.40.0 è stato testato su versioni di Go da 1.17 a 1.21.
- Fiber non è compatibile con l'interfaccia net/http. Ciò significa che non è possibile utilizzare direttamente progetti come gqlgen, go-swagger o altri progetti appartenenti all'ecosistema net/http.