golang,go,博客,开源,编程
Fiber
是一个 极其轻量级且高性能 的 Go Web 框架,受 Express.js 启发,专为 快速开发 REST API 和 Web 应用设计。Fiber 构建于 Fasthttp 之上,号称是 Go 语言最快的 Web 框架之一,提供了简洁的 API 和强大的功能,非常适合构建高吞吐量的 Web 服务。
net/http
快 10 倍 以上。app.Get()
、app.Post()
这样简洁直观的路由 API。fasthttp
,无其他额外依赖。net/http
,可以轻松迁移。go get -u github.com/gofiber/fiber/v2
package main
import (
"github.com/gofiber/fiber/v2"
)
func main() {
app := fiber.New()
// 定义路由
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, Fiber!")
})
// 启动服务器
app.Listen(":3000")
}
运行后访问 http://localhost:3000
,可以看到 "Hello, Fiber!"
。
Fiber 提供强大的路由功能,包括:
app.Get("/hello", func(c *fiber.Ctx) error {
return c.SendString("Hello, World!")
})
app.Get("/user/:id", func(c *fiber.Ctx) error {
id := c.Params("id")
return c.SendString("User ID: " + id)
})
app.Get("/api/*", func(c *fiber.Ctx) error {
return c.SendString("Wildcard match: " + c.Params("*"))
})
api := app.Group("/api")
api.Get("/users", func(c *fiber.Ctx) error {
return c.JSON(fiber.Map{"message": "All users"})
})
api.Get("/products", func(c *fiber.Ctx) error {
return c.JSON(fiber.Map{"message": "All products"})
})
type User struct {
Name string `json:"name"`
Email string `json:"email"`
}
app.Post("/user", func(c *fiber.Ctx) error {
u := new(User)
if err := c.BodyParser(u); err != nil {
return err
}
return c.JSON(fiber.Map{"status": "success", "user": u})
})
app.Get("/search", func(c *fiber.Ctx) error {
query := c.Query("q", "default_value") // 如果 `q` 为空,则返回 `default_value`
return c.SendString("Search query: " + query)
})
app.Post("/form", func(c *fiber.Ctx) error {
name := c.FormValue("name")
return c.SendString("Form Name: " + name)
})
Fiber 提供丰富的 内置中间件,如 CORS、JWT、Gzip、Logger 等。
app.Use(func(c *fiber.Ctx) error {
c.Set("Content-Encoding", "gzip")
return c.Next()
})
app.Use(fiber.Logger())
app.Use(fiber.CORS())
import "github.com/gofiber/jwt/v3"
app.Use(jwtware.New(jwtware.Config{
SigningKey: []byte("secret"),
}))
Fiber 允许直接托管静态文件:
app.Static("/static", "./public")
访问 http://localhost:3000/static/image.png
,即可访问 ./public/image.png
。
Fiber 内置了 WebSocket 支持:
import "github.com/gofiber/websocket/v2"
app.Get("/ws", websocket.New(func(c *websocket.Conn) {
for {
messageType, msg, err := c.ReadMessage()
if err != nil {
break
}
c.WriteMessage(messageType, msg)
}
}))
Gin
、Echo
的对比特性 | Fiber 🚀 | Gin ⚡ | Echo 🌟 |
---|---|---|---|
底层实现 | fasthttp | net/http | net/http |
性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
Express 风格 API | ✅ | ❌ | ✅ |
中间件支持 | ✅ | ✅ | ✅ |
WebSocket | ✅ | ❌ | ✅ |
适用场景 | 高性能 API | 轻量 API | Web 应用 |
结论:
Fiber 兼容 systemd
和 Docker
,适用于 Kubernetes、Serverless 部署。
systemd
启动 Fiber创建 fiber.service
:
[Unit]
Description=Fiber Web Server
After=network.target
[Service]
ExecStart=/usr/local/bin/my-fiber-app
Restart=always
User=nobody
Group=nogroup
[Install]
WantedBy=multi-user.target
然后启用:
sudo systemctl enable fiber.service
sudo systemctl start fiber.service
创建 Dockerfile
:
FROM golang:1.20
WORKDIR /app
COPY . .
RUN go mod tidy
RUN go build -o main .
CMD ["/app/main"]
然后构建并运行:
docker build -t fiber-app .
docker run -p 3000:3000 fiber-app
fasthttp
,适合高并发 API 服务。