跳转至

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 引擎 = 零内存分配,性能极高

安装配置

go mod init myapp
go get github.com/gofiber/fiber/v2  # 安装 Fiber v2

基本使用

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()})
    },
})

静态文件 & 模板

app.Static("/public", "./static")  // 静态文件服务

常见报错

报错信息原因解决方法
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 年