Fiber Go 高性能¶
一句话概述:Fiber 是 Go 语言的高性能 Web 框架,灵感来自 Express.js,基于 Fasthttp 引擎(比 net/http 快 10 倍),API 风格对 Node.js 开发者非常友好。
核心知识点¶
| 概念 | 白话解释 |
|---|---|
| App | 应用实例 = Fiber 的核心对象 |
| Ctx | 上下文 = 封装请求响应的对象(类似 Express 的 req/res 合体) |
| Middleware | 中间件 = 和 Express 一样的请求处理链 |
| Route | 路由 = URL 和处理函数的映射 |
| Group | 路由组 = 按前缀组织路由 |
| Fasthttp | 底层 HTTP 引擎 = 零内存分配,性能极高 |
安装配置¶
基本使用¶
package main
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/logger"
"github.com/gofiber/fiber/v2/middleware/cors"
"github.com/gofiber/fiber/v2/middleware/recover"
)
func main() {
app := fiber.New(fiber.Config{
AppName: "BioInfo API v1.0", // 应用名
})
// 中间件
app.Use(logger.New()) // 请求日志
app.Use(cors.New()) // 跨域
app.Use(recover.New()) // 崩溃恢复
// 路由
api := app.Group("/api") // 路由组
api.Get("/samples", func(c *fiber.Ctx) error {
return c.JSON(fiber.Map{"data": []string{}}) // 返回 JSON
})
api.Post("/samples", func(c *fiber.Ctx) error {
type Sample struct {
Name string `json:"name"`
}
sample := new(Sample)
if err := c.BodyParser(sample); err != nil { // 解析请求体
return c.Status(400).JSON(fiber.Map{"error": err.Error()})
}
return c.Status(201).JSON(sample)
})
api.Get("/samples/:id", func(c *fiber.Ctx) error {
id := c.Params("id") // 路径参数
return c.JSON(fiber.Map{"id": id})
})
app.Listen(":3000") // 启动
}
高级用法¶
错误处理¶
app := fiber.New(fiber.Config{
ErrorHandler: func(c *fiber.Ctx, err error) error {
code := fiber.StatusInternalServerError
if e, ok := err.(*fiber.Error); ok {
code = e.Code // 使用 Fiber 错误码
}
return c.Status(code).JSON(fiber.Map{"error": err.Error()})
},
})
静态文件 & 模板¶
常见报错¶
| 报错信息 | 原因 | 解决方法 |
|---|---|---|
BodyParser: unprocessable entity | 请求体格式错误 | 检查 Content-Type 和 JSON 格式 |
Cannot convert to int | 参数类型转换失败 | 使用 c.ParamsInt("id") |
速查表¶
// === Fiber vs Express 对照 ===
// Express: app.get('/path', (req, res) => {})
// Fiber: app.Get("/path", func(c *fiber.Ctx) error {})
// === 请求数据 ===
c.Params("id") // 路径参数
c.Query("page") // 查询参数
c.BodyParser(&struct) // 解析请求体
c.Get("Header-Name") // 获取请求头
c.FormFile("file") // 上传文件
// === 响应 ===
c.JSON(data) // JSON 响应
c.SendString("text") // 文本响应
c.Status(201).JSON(x) // 带状态码
c.SendFile("path") // 发送文件
c.Redirect("/url") // 重定向
// === Fiber vs Gin ===
// Fiber: 基于 Fasthttp(更快但不兼容 net/http 生态)
// Gin: 基于 net/http(兼容标准库生态)
// 选择建议:追求极致性能选 Fiber,追求生态兼容选 Gin
参考:Fiber 文档 | 更新于 2026 年