必须用v2且Go≥1.21:先go version确认版本,低于1.21需升级至1.24;go get github.com/gofiber/fiber/v2(勿加-u);import路径必含/v2;初始化只用fiber.New();StrictRouting导致尾斜杠404,应加重定向中间件。

go get 装不对版本,项目直接跑不起来——必须先确认 Go 版本再选 v2 还是 v3,绝大多数人该用 v2。
检查 Go 版本:低于 1.21 就别碰 Fiber
Fiber v2 要求 go version 1.21+,v3 强制要求 1.24+。运行 go version 查看当前版本。若输出类似 go version go1.20.14 darwin/arm64,说明不满足 v2 最低要求,得先升级。
升级建议用官方方式:go install golang.org/dl/go1.24@latest → go1.24 download。别依赖系统包管理器,容易卡在旧版。
-
go1.24安装后,临时切版本验证:go1.24 version - 确认无误后再设为默认:
export GOROOT=$(go env GOROOT)(Linux/macOS) - Windows 用户用
set GOROOT=...或通过安装包替换原GOROOT
拉取依赖:别用 -u,也别漏掉 /v2
执行 go get github.com/gofiber/fiber/v2 即可。不需要 -u 参数——它会强制升级所有间接依赖,可能把 fasthttp 升到不兼容版,引发 undefined: fasthttp.URI 类错误。
模块初始化要同步做:go mod init myapp,再 go get。否则 go 可能解析成旧路径 github.com/gofiber/fiber(无版本后缀),导致编译失败。
- 看到
go: downloading github.com/gofiber/fiber/v2 v2.52.0才算成功 - 如果提示
unknown revision,大概率是 GOPROXY 没配或被墙,换国内源:go env -w GOPROXY=https://goproxy.cn,direct - 绝对不要写
import "github.com/gofiber/fiber"——缺/v2就报错
初始化应用:fiber.New() 是唯一安全起点
别抄示例里 fiber.Default() ——它默认加载日志、panic 恢复、请求 ID 中间件,上线后每秒几百请求就会把磁盘 I/O 打满,TTFB 增加 0.3–0.8ms。
正确写法只有这一种:
app := fiber.New()
后续按需加中间件,比如开发时只加一个轻量日志:
app.Use(logger.New(logger.Config{SkipPaths: []string{"/health"}}))
-
fiber.Default()仅限本地快速验证逻辑,写完立刻删掉 - 如果用了
fiber.NewWithCustomCtx,注意这是 v3 特有 API,v2 里不存在 - 配置对象传空结构体即可:
fiber.New(&fiber.Config{}),不用填任何字段
第一个路由 404?先查 StrictRouting
注册了 app.Get("/users", handler),但访问 /users/(带尾斜杠)就 404,不是代码问题,是 Fiber 默认开启 StrictRouting: true,把 /users 和 /users/ 当作两条不同路由。
解决方案只有两个,且不能混用:
- 显式注册两种路径:
app.Get("/users", handler)和app.Get("/users/", handler) - 加重定向中间件(推荐):
app.Use(func(c *fiber.Ctx) error { if strings.HasSuffix(c.Path(), "/") && c.Path() != "/" { return c.Redirect(strings.TrimSuffix(c.Path(), "/"), 301) } return c.Next() }) - 千万别写
fiber.New(&fiber.Config{StrictRouting: false})——当同时存在/users和/users/:id时,/users/123可能被前者匹配,c.Params("id")拿不到值
v2 和 v3 的 import 路径、API、Go 版本要求全都不兼容,一步错,后面全是红字。


















