Fiber
zainspirowany jest najbardziej popularnym frameworkiem Web
owym Express
w Internecie. Łączymy użyteczność Express
u i czystą wydajność Go
. Jeśli kiedykolwiek tworzyłeś aplikację Web
ową używając Node.js
(korzystając z Express lub podobnego frameworka), wiele metod i zasad powinno być dla Ciebie bardzo łatwe do zrozumienia.
Szybki Start
Instalacja
Upewnij się, że masz zainstalowany Go w wersji 1.17
lub nowszej.
Zainicjalizuj swój projekt, tworząc folder i uruchamiając polecenie go mod init github.com/your/repo
wewnątrz folderu, a następnie zainstaluj Fiber przy użyciu polecenia go get
:
go get -u github.com/gofiber/fiber/v2
Hello World
package main
// Importuj pakiet fiber
import "github.com/gofiber/fiber/v2"
func main() {
// Zdefiniuj aplikację Fiber
app := fiber.New()
// Zdefiniuj trasę http
app.Get("/", func(c *fiber.Ctx) error {
// Zwróć "Hello, World ?!" jako ciąg znaków
return c.SendString("Hello, World ?!")
})
// Nasłuchuj na porcie 3000
app.Listen(":3000")
}
Dostępne pod adresem: http://localhost:3000/
Podstawowa Trasowanie
Przykład podstawowego trasowania w 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("? Z: %s, Do: %s", c.Params("from"), c.Params("to"))
return c.SendString(msg) // => ? Z: LAX, Do: 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 ma %s lat", c.Params("name"), c.Params("age"))
return c.SendString(msg) // => ? john ma 75 lat
})
// GET /john
app.Get("/:name", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("Cześć, %s ?!", c.Params("name"))
return c.SendString(msg) // => Cześć john ?!
})
log.Fatal(app.Listen(":3000"))
}
Serwowanie Statycznych Plików
Ustawienie serwowania statycznych plików
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
Zwiększ zdolność obsługi żądań HTTP za pomocą middleware.
func main() {
app := fiber.New()
// Dopasuj dowolną trasę, tutaj dostosuj middleware za pomocą funkcji domknięcia
app.Use(func(c *fiber.Ctx) error {
fmt.Println("? Pierwszy obsługujący")
// Kontynuuj obsługę następnego middleware lub funkcji trasy
return c.Next()
})
// Dopasuj trasy zaczynające się od /api
app.Use("/api", func(c *fiber.Ctx) error {
fmt.Println("? Drugi obsługujący")
return c.Next()
})
// Użyj wbudowanego middleware do obsługi wyjątków
app.Use(recover.New())
// GET /api/register
app.Get("/api/list", func(c *fiber.Ctx) error {
fmt.Println("? Ostatni obsługujący")
return c.SendString("Hello, World ?!")
})
log.Fatal(app.Listen(":3000"))
}
Silnik szablonów
Jeśli silnik szablonów nie jest ustawiony, Fiber
domyślnie używa html/template.
package main
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/template/pug"
)
func main() {
// Ustawienie silnika szablonów
app := fiber.New(fiber.Config{
Views: pug.New("./views", ".pug"),
})
app.Get("/", func(c *fiber.Ctx) error {
// Renderowanie szablonu ./views/home.pug przy użyciu parametrów szablonu z fiber.map
return c.Render("home", fiber.Map{
"title": "Strona główna",
"year": 1999,
})
})
log.Fatal(app.Listen(":3000"))
}
Pośrednictwo zasobów z innego pochodzenia (CORS)
Pośrednictwo dla CORS w Fiber, umożliwia aktywację udostępniania zasobów z innych domen z różnymi opcjami zapobiegającymi atakom CORS.
import (
"log"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cors"
)
func main() {
app := fiber.New()
// Konfiguracja domyślna dla CORS
app.Use(cors.New())
// Lub dostosowanie parametrów CORS, aby zezwolić na żądania z określonych domen
app.Use(cors.New(cors.Config{
AllowOrigins: "https://www.tizi365.com, https://tizi365.com",
AllowHeaders: "Origin, Content-Type, Accept",
}))
log.Fatal(app.Listen(":3000"))
}
Sprawdź CORS, przekazując dowolną domenę w nagłówku Origin
:
curl -H "Origin: https://www.tizi365.com" --verbose http://localhost:3000
Dostosowana odpowiedź 404
func main() {
app := fiber.New()
app.Static("/", "./public")
app.Get("/demo", func(c *fiber.Ctx) error {
return c.SendString("To jest demo!")
})
app.Post("/register", func(c *fiber.Ctx) error {
return c.SendString("Witaj!")
})
// Ostatnie pośrednictwo będzie dopasowane do wszystkich żądań, włączając 404
app.Use(func(c *fiber.Ctx) error {
// Inna logika obsługi
// Zwróć status 404
return c.SendStatus(404)
// => 404 "Not Found"
})
log.Fatal(app.Listen(":3000"))
}
Odpowiedź JSON
Przykład użycia Fiber do zwracania danych 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": "Cześć John!",
})
// => {"success":true, "message":"Cześć John!"}
})
log.Fatal(app.Listen(":3000"))
}
Pośrednictwo przywracania
Przechwytywanie błędów panic, aby zapobiec awarii programu i jego zakończeniu.
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/recover"
)
func main() {
app := fiber.New()
// Użyj pośrednictwa panic, aby przechwycić wyjątki panic
app.Use(recover.New())
app.Get("/", func(c *fiber.Ctx) error {
panic("zazwyczaj to spowodowałoby awarię twojej aplikacji")
})
log.Fatal(app.Listen(":3000"))
}
Test wydajności
[
Ograniczenia
- Ze względu na użycie niebezpiecznych funkcji w Fiber, może on być niekompatybilny z najnowszymi wersjami Go. Fiber 2.40.0 został przetestowany na wersjach Go od 1.17 do 1.21.
- Fiber nie jest kompatybilny z interfejsem net/http. Oznacza to, że nie można bezpośrednio używać projektów takich jak gqlgen, go-swagger czy innych projektów należących do ekosystemu net/http.