Fiber Core Knowledge
Full Reference: See advanced.md for validation with go-playground/validator, WebSocket setup, custom error handling, prefork mode, and graceful shutdown.
Deep Knowledge: Use
mcp__documentation__fetch_docswith technology:fiberfor comprehensive documentation.
Basic Setup
package main
import "github.com/gofiber/fiber/v2"
func main() {
app := fiber.New()
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World!")
})
app.Listen(":8080")
}
Configuration
app := fiber.New(fiber.Config{
Prefork: true, // Multiple processes
StrictRouting: true, // /foo != /foo/
CaseSensitive: true, // /Foo != /foo
BodyLimit: 4 * 1024 * 1024, // 4MB
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
})
Routing
app.Get("/users", listUsers)
app.Get("/users/:id", getUser)
app.Post("/users", createUser)
app.Put("/users/:id", updateUser)
app.Delete("/users/:id", deleteUser)
// Path parameters
app.Get("/users/:id", func(c *fiber.Ctx) error {
id := c.Params("id")
return c.JSON(fiber.Map{"id": id})
})
// Optional parameter
app.Get("/users/:name?", func(c *fiber.Ctx) error {
name := c.Params("name", "anonymous")
return c.JSON(fiber.Map{"name": name})
})
// Route groups
api := app.Group("/api")
v1 := api.Group("/v1")
v1.Get("/users", listUsersV1)
Context - Request Data
app.Post("/users", func(c *fiber.Ctx) error {
// Path params
id := c.Params("id")
idInt, _ := c.ParamsInt("id")
// Query params
page := c.Query("page", "1")
pageInt := c.QueryInt("page", 1)
// Headers
auth := c.Get("Authorization")
// Cookies
session := c.Cookies("session_id")
return c.SendStatus(fiber.StatusOK)
})
Body Parsing
type CreateUserRequest struct {
Name string `json:"name"`
Email string `json:"email"`
}
app.Post("/users", func(c *fiber.Ctx) error {
var req CreateUserRequest
if err := c.BodyParser(&req); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"error": err.Error(),
})
}
return c.Status(fiber.StatusCreated).JSON(req)
})
Middleware
import (
"github.com/gofiber/fiber/v2/middleware/logger"
"github.com/gofiber/fiber/v2/middleware/recover"
"github.com/gofiber/fiber/v2/middleware/cors"
"github.com/gofiber/fiber/v2/middleware/limiter"
)
app.Use(recover.New())
app.Use(logger.New())
app.Use(cors.New(cors.Config{
AllowOrigins: "https://example.com",
AllowMethods: "GET,POST,PUT,DELETE",
}))
app.Use(limiter.New(limiter.Config{
Max: 100,
Expiration: 1 * time.Minute,
}))
Health Checks
app.Get("/health", func(c *fiber.Ctx) error {
return c.JSON(fiber.Map{"status": "healthy"})
})
app.Get("/ready", func(c *fiber.Ctx) error {
if err := db.Ping(); err != nil {
return c.Status(fiber.StatusServiceUnavailable).JSON(fiber.Map{
"status": "not ready",
})
}
return c.JSON(fiber.Map{"status": "ready"})
})
When NOT to Use This Skill
- Gin projects - Gin has different context API
- Echo projects - Echo has different middleware patterns
- Chi projects - Chi is stdlib-compatible
- Standard net/http required - Fiber uses fasthttp, not net/http
- gRPC services - Fiber doesn't support gRPC
Anti-Patterns
| Anti-Pattern | Why It's Bad | Solution |
|--------------|--------------|----------|
| Not calling c.Next() in middleware | Breaks middleware chain | Always call c.Next() unless stopping |
| Using c.Body() multiple times | Body is consumed | Store body in variable first |
| Missing error handling | Silent failures | Check BodyParser() return value |
| Not setting Prefork carefully | May cause issues with state | Only use Prefork without shared state |
| No rate limiting | DDoS vulnerability | Use limiter middleware |
Quick Troubleshooting
| Problem | Diagnosis | Fix |
|---------|-----------|-----|
| Route not found | Wrong method or path | Check exact route registration |
| Body parsing fails | Wrong content-type | Ensure Content-Type header is correct |
| CORS errors | Not configured | Use cors.New() middleware |
| Middleware not executing | Wrong order | Place before route handlers |
| Prefork issues | Shared state problems | Avoid shared mutable state with Prefork |
Production Checklist
- [ ] Recovery middleware enabled
- [ ] CORS configured
- [ ] Rate limiting enabled
- [ ] Request body size limit set
- [ ] Timeouts configured
- [ ] Structured logging
- [ ] Health/readiness endpoints
- [ ] Graceful shutdown
- [ ] Input validation
Scan to join WeChat group