1. 迁移工具(Migration Tool)
特性说明
Fiber v3 提供 CLI 迁移助手,可自动升级项目代码,简化 v2 到 v3 的迁移流程。
示例
# 安装迁移 CLI
go install github.com/gofiber/cli/fiber@latest
# 执行迁移
fiber migrate --to v3.0.0-rc.2
优势
- 自动处理 API 变更、配置迁移,减少手动修改
- 支持批量升级,提升迁移效率
- 保留代码逻辑,降低迁移出错风险
2. 最低 Go 版本要求
特性说明
Fiber v3 不再支持 Go 1.25 以下版本,需升级至 Go 1.25+ 方可使用。
示例
# 查看当前 Go 版本
go version
# 升级 Go 版本(以 1.25 为例)
go install golang.org/dl/go1.25@latest
go1.25 download
优势
- 利用 Go 1.25+ 新特性,提升框架性能与安全性
- 减少对旧版本的兼容负担,聚焦新功能开发
- 适配最新 Go 生态工具与库
3. App 模块增强
特性说明
App 模块新增多项功能,包括自定义上下文、路由约束、TLS 配置、静态文件迁移等。
3.1 自定义上下文(Custom Ctx Interface)
支持 NewWithCustomCtx 方法,扩展上下文能力。
示例
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
// 自定义上下文
type CustomCtx struct {
fiber.Ctx
}
// 新增自定义方法
func (c *CustomCtx) GetUserID() string {
return "user_123"
}
func main() {
// 初始化带自定义上下文的应用
app := fiber.NewWithCustomCtx(func(app *fiber.App) fiber.Ctx {
return &CustomCtx{Ctx: *fiber.NewCtx(app)}
})
app.Get("/user", func(c fiber.Ctx) error {
customCtx := c.(*CustomCtx)
return c.SendString("User ID: " + customCtx.GetUserID())
})
log.Fatal(app.Listen(":3000"))
}
优势
- 按需扩展上下文,贴合业务逻辑
- 避免全局变量,代码更简洁
- 兼容默认上下文,无额外学习成本
3.2 自定义路由约束(Custom Route Constraints)
通过 RegisterCustomConstraint 定义路由参数校验规则。
示例
package main
import (
"github.com/gofiber/fiber/v3"
"github.com/oklog/ulid"
)
// 自定义 ULID 约束
type UlidConstraint struct{}
func (*UlidConstraint) Name() string {
return "ulid"
}
func (*UlidConstraint) Execute(param string, args ...string) bool {
_, err := ulid.Parse(param)
return err == nil
}
func main() {
app := fiber.New()
// 注册约束
app.RegisterCustomConstraint(&UlidConstraint{})
// 使用约束校验路由参数
app.Get("/user/:id<ulid>", func(c fiber.Ctx) error {
return c.SendString("Valid ULID: " + c.Params("id"))
})
app.Listen(":3000")
}
优势
- 灵活定义参数校验规则,适配复杂业务
- 路由层直接校验,减少中间件冗余代码
- 提升路由安全性,避免非法参数进入业务逻辑
3.3 TLS 配置增强
支持 TLS 最低版本配置与自动证书管理(Let's Encrypt)。
示例
package main
import (
"crypto/tls"
"github.com/gofiber/fiber/v3"
"golang.org/x/crypto/acme/autocert"
)
func main() {
app := fiber.New()
// 配置 TLS 最低版本
app.Listen(":443", fiber.ListenConfig{
TLSMinVersion: tls.VersionTLS12,
})
// 自动证书管理(Let's Encrypt)
certManager := &autocert.Manager{
Prompt: autocert.AcceptTOS,
HostPolicy: autocert.HostWhitelist("example.com"),
Cache: autocert.DirCache("./certs"),
}
app.Listen(":443", fiber.ListenConfig{
AutoCertManager: certManager,
})
}
优势
- 灵活配置 TLS 安全策略,提升通信安全性
- 自动管理证书,简化 HTTPS 部署
- 支持 ACME 协议,适配主流证书服务商
3.4 静态文件服务迁移
移除 app.Static(),整合至 static 中间件,配置更灵活。
示例
package main
import (
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/static"
)
func main() {
app := fiber.New()
// 静态文件服务
app.Use("/static", static.New("./public", static.Config{
IndexNames: []string{"index.html"},
MaxAge: 3600,
Browse: true,
}))
// 单页应用 fallback
app.Get("*", static.New("./public/index.html"))
app.Listen(":3000")
}
优势
- 支持索引文件、缓存、目录浏览等配置
- 适配单页应用路由场景
- 与中间件生态无缝集成,按需挂载
4. Hooks 模块增强
特性说明
新增 OnPreShutdown、OnPostShutdown 钩子,优化服务关闭流程。
示例
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func main() {
app := fiber.New()
// 注册关闭前钩子
app.Hooks().OnPreShutdown(func() error {
log.Println("Server is shutting down...")
return nil
})
// 注册关闭后钩子
app.Hooks().OnPostShutdown(func(err error) error {
if err != nil {
log.Printf("Shutdown error: %v", err)
} else {
log.Println("Server shutdown successfully")
}
return nil
})
// 异步启动服务
go app.Listen(":3000")
// 模拟关闭服务
// app.Shutdown()
}
优势
- 精细化控制服务生命周期,便于资源清理
- 统一关闭回调,简化错误处理
- 提升服务稳定性,避免资源泄漏
5. Listen 模块增强
特性说明
统一 Listen 配置,支持 Unix 域套接字,简化 TLS 与关闭处理。
示例
package main
import (
"github.com/gofiber/fiber/v3"
)
func main() {
app := fiber.New()
// Unix 域套接字配置
app.Listen("app.sock", fiber.ListenConfig{
ListenerNetwork: fiber.NetworkUnix,
UnixSocketFileMode: 0770,
})
// 标准 TCP 监听
app.Listen(":3000")
}
优势
- 统一监听配置,减少 API 差异
- 自动处理 Unix 套接字权限与文件清理
- 简化 TLS 部署,支持多种安全配置
6. Router 模块增强
特性说明
新增 RouteChain 链式路由、自动 HEAD 路由、多风格处理器兼容。
6.1 RouteChain 链式路由
支持同一路径多方法链式定义,贴近 Express 风格。
示例
package main
import "github.com/gofiber/fiber/v3"
func main() {
app := fiber.New()
// 链式定义路由
app.RouteChain("/api/user/:id").
Get(func(c fiber.Ctx) error {
return c.JSON(fiber.Map{"action": "get", "id": c.Params("id")})
}).
Post(func(c fiber.Ctx) error {
return c.JSON(fiber.Map{"action": "create"})
}).
Put(func(c fiber.Ctx) error {
return c.JSON(fiber.Map{"action": "update", "id": c.Params("id")})
}).
Delete(func(c fiber.Ctx) error {
return c.JSON(fiber.Map{"action": "delete", "id": c.Params("id")})
})
app.Listen(":3000")
}
优势
- 同一资源路由集中定义,结构清晰
- 减少路径重复,降低拼写错误
- 支持嵌套链式调用,适配复杂路由层级
6.2 自动 HEAD 路由
为 GET 路由自动生成 HEAD 路由,复用中间件与响应头。
示例
package main
import "github.com/gofiber/fiber/v3"
func main() {
app := fiber.New()
// 定义 GET 路由,自动生成 HEAD 路由
app.Get("/health", func(c fiber.Ctx) error {
c.Set("X-Service", "fiber-api")
return c.SendString("OK")
})
// 禁用自动 HEAD 路由
// app := fiber.New(fiber.Config{DisableHeadAutoRegister: true})
app.Listen(":3000")
}
优势
- 符合 HTTP 规范,无需手动编写 HEAD 路由
- 保证响应头一致性,减少重复代码
- 可配置禁用,灵活适配业务需求
6.3 多风格处理器兼容
支持 Fiber、Express、net/http、fasthttp 等多种处理器风格。
示例
package main
import (
"github.com/gofiber/fiber/v3"
"net/http"
)
func main() {
app := fiber.New()
// Fiber 原生处理器
app.Get("/fiber", func(c fiber.Ctx) error {
return c.SendString("Fiber handler")
})
// Express 风格处理器
app.Get("/express", func(c fiber.Req, res fiber.Res) error {
return res.SendString("Express-style handler")
})
// net/http 处理器
app.Get("/nethttp", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("net/http handler"))
}))
app.Listen(":3000")
}
优势
- 兼容多种处理器风格,降低迁移成本
- 复用现有生态代码,提升开发效率
- 统一错误处理,简化代码维护
7. Context 模块增强
特性说明
优化上下文 API,新增状态管理、错误格式化等功能。
示例
package main
import "github.com/gofiber/fiber/v3"
func main() {
app := fiber.New()
// 全局状态管理
app.State().Set("app_name", "Fiber v3 Demo")
app.Get("/", func(c fiber.Ctx) error {
// 获取全局状态
appName := c.App().State().GetString("app_name")
// 格式化错误
err := fiber.NewErrorf(400, "Invalid request: %s", "missing parameter")
return c.Status(err.Code).SendString(err.Message + " | App: " + appName)
})
app.Listen(":3000")
}
优势
- 全局状态管理,便于跨请求共享数据
- 格式化错误,提升错误信息可读性
- 简化上下文操作,提升开发效率
8. Binding 模块增强
特性说明
统一绑定接口 Bind(),支持多来源数据绑定与自定义绑定器。
示例
package main
import "github.com/gofiber/fiber/v3"
// 绑定结构体
type UserRequest struct {
ID int `params:"id"`
Name string `json:"name"`
Email string `query:"email"`
Token string `cookie:"token"`
}
func main() {
app := fiber.New()
app.Post("/user/:id", func(c fiber.Ctx) error {
var req UserRequest
// 统一绑定多来源数据
if err := c.Bind().All(&req); err != nil {
return c.Status(400).JSON(fiber.Map{"error": err.Error()})
}
return c.JSON(req)
})
app.Listen(":3000")
}
优势
- 替代 v2 多种 Parser 方法,简化绑定逻辑
- 支持 URI、Body、Query、Cookie 等多来源绑定
- 内置数据校验,错误处理统一
- 支持自定义绑定器,适配复杂场景
9. Extractors 包
特性说明
新增独立 extractors 包,统一数据提取逻辑,支持链式 fallback。
示例
package main
import (
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/extractors"
)
func main() {
app := fiber.New()
// 链式提取 API Key:Header → Query → Cookie
apiKeyExtractor := extractors.Chain(
extractors.FromHeader("X-API-Key"),
extractors.FromQuery("api_key"),
extractors.FromCookie("api_key"),
)
// 鉴权中间件
app.Use(func(c fiber.Ctx) error {
apiKey, err := apiKeyExtractor.Extract(c)
if err != nil || apiKey != "valid_key" {
return c.Status(401).SendString("Unauthorized")
}
return c.Next()
})
app.Get("/data", func(c fiber.Ctx) error {
return c.SendString("Authorized")
})
app.Listen(":3000")
}
优势
- 统一提取逻辑,减少重复代码
- 支持链式 fallback,适配多来源认证
- 类型安全,错误处理统一
- 提升代码可维护性
10. Redirect 模块增强
特性说明
优化重定向 API,支持配置化重定向与状态码管理。
示例
package main
import "github.com/gofiber/fiber/v3"
func main() {
app := fiber.New()
// 永久重定向
app.Get("/old", func(c fiber.Ctx) error {
return c.Redirect("/new", fiber.StatusMovedPermanently)
})
// 临时重定向
app.Get("/temp", func(c fiber.Ctx) error {
return c.Redirect("/target", fiber.StatusTemporaryRedirect)
})
app.Listen(":3000")
}
优势
- 简化重定向操作,支持标准 HTTP 状态码
- 配置灵活,适配不同重定向场景
- 提升路由跳转的可读性与维护性
11. Client 包重构
特性说明
完全重构客户端包,支持全局配置、CookieJar、请求钩子等功能。
示例
package main
import (
"fmt"
"github.com/gofiber/fiber/v3/client"
"time"
)
func main() {
// 初始化客户端
cli := client.New().
SetBaseURL("https://api.example.com").
AddHeader("Authorization", "Bearer token").
SetTimeout(5 * time.Second)
// 发送 GET 请求
resp, err := cli.Get("/users/:id", client.Config{
PathParam: map[string]string{"id": "42"},
Param: map[string]string{"include": "profile"},
})
if err != nil {
panic(err)
}
defer resp.Close()
fmt.Println("Status:", resp.StatusCode())
fmt.Println("Body:", resp.String())
}
优势
- 全局配置减少重复代码
- 内置 CookieJar,自动管理会话
- 支持路径参数、查询参数、请求钩子
- 统一错误处理,提升可用性
12. 泛型函数
特性说明
新增 Query、Params、Convert 等泛型函数,避免手动类型转换。
示例
package main
import (
"strconv"
"github.com/gofiber/fiber/v3"
)
func main() {
app := fiber.New()
// 泛型 Query:直接获取 int 类型
app.Get("/query", func(c fiber.Ctx) error {
age := fiber.Query[int](c, "age", 0)
return c.JSON(fiber.Map{"age": age})
})
// 泛型 Params:直接获取 string 类型
app.Get("/params/:id", func(c fiber.Ctx) error {
id := fiber.Params[string](c, "id", "default")
return c.JSON(fiber.Map{"id": id})
})
// 泛型 Convert:自定义转换逻辑
app.Get("/convert", func(c fiber.Ctx) error {
num, err := fiber.Convert[int](c.Query("num"), strconv.Atoi, 0)
if err != nil {
return c.Status(400).SendString("Invalid number")
}
return c.JSON(fiber.Map{"result": num * 2})
})
app.Listen(":3000")
}
优势
- 避免手动类型转换,代码更简洁
- 支持默认值,减少空值判断
- 编译时类型检查,提升安全性
- 自定义转换逻辑,适配复杂场景
13. Utils 模块增强
特性说明
优化工具函数,新增 ReloadViews 等功能,支持模板热重载。
示例
package main
import (
"github.com/gofiber/fiber/v3"
"github.com/gofiber/template/html/v2"
)
func main() {
// 初始化模板引擎
engine := html.New("./views", ".html")
app := fiber.New(fiber.Config{Views: engine})
// 模板热重载
app.Get("/reload", func(c fiber.Ctx) error {
if err := c.App().ReloadViews(); err != nil {
return c.Status(500).SendString("Reload failed")
}
return c.SendString("Views reloaded")
})
app.Get("/", func(c fiber.Ctx) error {
return c.Render("index", fiber.Map{"title": "Fiber v3"})
})
app.Listen(":3000")
}
优势
- 模板热重载,提升开发效率
- 工具函数更丰富,简化常用操作
- 提升框架易用性,减少第三方依赖
14. Services 模块
特性说明
新增 Services 功能,统一管理应用依赖服务(数据库、缓存等)。
示例
package main
import (
"context"
"fmt"
"github.com/gofiber/fiber/v3"
)
// 自定义 Redis 服务
type RedisService struct {
addr string
}
func (s *RedisService) Start(ctx context.Context) error {
fmt.Printf("Redis started at %s\n", s.addr)
return nil
}
func (s *RedisService) String() string {
return "redis-service"
}
func (s *RedisService) State(ctx context.Context) (string, error) {
return "running", nil
}
func (s *RedisService) Terminate(ctx context.Context) error {
fmt.Println("Redis stopped")
return nil
}
func main() {
// 注册服务
cfg := fiber.Config{}
cfg.Services = append(cfg.Services, &RedisService{addr: "localhost:6379"})
app := fiber.New(cfg)
app.Get("/", func(c fiber.Ctx) error {
return c.SendString("Hello Fiber v3")
})
app.Listen(":3000")
}
优势
- 统一管理依赖服务,启动/停止逻辑集中
- 启动日志展示服务状态,便于排查问题
- 适配各类依赖,简化部署维护
- 服务生命周期与应用同步
15. Log 模块增强
特性说明
优化日志配置,Output 字段重命名为 Stream,适配更多日志输出场景。
示例
package main
import (
"os"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/logger"
)
func main() {
app := fiber.New()
// 配置日志输出到文件
file, _ := os.Create("app.log")
defer file.Close()
app.Use(logger.New(logger.Config{
Stream: file, // 替代 v2 的 Output
Format: "${time} ${status} ${method} ${path}\n",
}))
app.Get("/", func(c fiber.Ctx) error {
return c.SendString("Hello Fiber v3")
})
app.Listen(":3000")
}
优势
- 日志配置更清晰,适配多种输出流
- 支持自定义格式,满足不同日志需求
- 提升日志系统灵活性与可扩展性
16. Storage 接口
特性说明
统一存储接口,支持多种存储后端(内存、Redis、文件等)。
示例
package main
import (
"github.com/gofiber/fiber/v3"
"github.com/gofiber/storage/memory/v2"
)
func main() {
// 初始化内存存储
store := memory.New()
app := fiber.New(fiber.Config{Storage: store})
app.Get("/set", func(c fiber.Ctx) error {
_ = c.App().Storage().Set("key", []byte("value"), 0)
return c.SendString("Key set")
})
app.Get("/get", func(c fiber.Ctx) error {
val, _ := c.App().Storage().Get("key")
return c.SendString("Value: " + string(val))
})
app.Listen(":3000")
}
优势
- 统一存储 API,切换后端无需修改业务代码
- 支持多种存储实现,适配不同场景
- 提升代码可移植性与扩展性
17. 中间件增强
特性说明
优化多个中间件(BasicAuth、Cache、CORS、CSRF 等),提升功能与安全性。
17.1 BasicAuth 中间件
支持哈希密码、自定义密钥查找函数。
示例
package main
import (
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/basicauth"
"golang.org/x/crypto/bcrypt"
)
func main() {
app := fiber.New()
// 哈希密码
hash, _ := bcrypt.GenerateFromPassword([]byte("password"), bcrypt.DefaultCost)
app.Use(basicauth.New(basicauth.Config{
Users: map[string]string{"user": string(hash)},
Realm: "Restricted",
}))
app.Get("/", func(c fiber.Ctx) error {
return c.SendString("Authenticated")
})
app.Listen(":3000")
}
优势
- 支持哈希密码,提升安全性
- 自定义密钥查找,适配复杂认证场景
- 配置更灵活,满足不同安全需求
17.2 CORS 中间件
新增 AllowOriginsFunc,动态允许跨域来源。
示例
package main
import (
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/cors"
)
func main() {
app := fiber.New()
app.Use(cors.New(cors.Config{
AllowOriginsFunc: func(origin string) bool {
// 动态允许跨域来源
return origin == "https://example.com"
},
AllowMethods: "GET,POST,PUT,DELETE",
}))
app.Get("/", func(c fiber.Ctx) error {
return c.SendString("CORS enabled")
})
app.Listen(":3000")
}
优势
- 动态配置跨域来源,提升灵活性
- 支持更精细的跨域控制
- 适配复杂前端架构
18. Addons 模块
特性说明
新增 Retry 等插件,简化复杂功能实现。
示例(Retry 插件)
package main
import (
"fmt"
"github.com/gofiber/fiber/v3/addon/retry"
"github.com/gofiber/fiber/v3/client"
)
func main() {
// 初始化指数退避重试器
r := retry.NewExponentialBackoff(retry.Config{MaxRetries: 3})
err := r.Retry(func() error {
resp, err := client.New().Get("https://api.example.com/data")
if err != nil {
return err
}
defer resp.Close()
if resp.StatusCode() != 200 {
return fmt.Errorf("status: %d", resp.StatusCode())
}
return nil
})
if err != nil {
panic(err)
}
fmt.Println("Request success")
}
优势
- 简化重试逻辑,无需手动编写循环
- 支持指数退避与抖动,避免服务雪崩
- 适配客户端请求,提升系统可用性
- 配置灵活,自定义重试策略