应使用v2而非v3:Fiber v2要求Go≥1.21,v3要求Go≥1.24;生产环境仅推荐v2,因v3仍处测试阶段,官方文档、中间件及模板引擎多只维护v2分支,混用会导致编译错误。

go get 命令能装上,但不等于装对了——v2 和 v3 的兼容性、Go 版本、甚至 go.mod 里残留的旧路径都可能让后续启动直接 panic。
确认 Go 版本是否达标
Fiber v2 要求 Go ≥ 1.21,v3 要求 Go ≥ 1.24。运行以下命令检查:
go version
如果输出是 go version go1.20.15 darwin/arm64 这类低于 1.21 的版本,go get github.com/gofiber/fiber/v2 仍会成功,但实际拉的是降级兼容的旧 commit,运行时可能 missing method 或 panic。升级建议用:
-
go install golang.org/dl/go1.24@latest(先装新版工具链) -
go1.24 download(下载并设为默认) - 再验证
go version输出是否已变
选 v2 还是 v3?生产环境只认 v2
截至 2026 年 10 月,github.com/gofiber/fiber/v3 仍是测试阶段:
- v3 的
fiber.NewWithCustomCtx等新 API 在 CI 流水线中容易因依赖解析错乱导致构建失败 - 官方文档、第三方中间件(如
fiber-jwt)、模板引擎适配多数只维护 v2 分支 - 混用
v2和v3import 路径会导致编译报错:cannot use *fiber.Ctx (type *v2.Ctx) as type *v3.Ctx
所以,执行这行即可:
go get 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("ok")
})
app.Listen(":3000")
}
然后运行:
-
go mod init test-fiber(确保有模块初始化) -
go run .,访问http://localhost:3000应返回ok - 若报错
cannot find package "github.com/gofiber/fiber/v2",说明go.mod没自动写入依赖,手动加一行:require github.com/gofiber/fiber/v2 v2.52.0(以go list -m -f '{{.Version}}' github.com/gofiber/fiber/v2查最新版)
常见静默失败点
go get不报错 ≠ 安装成功:
- 公司内网或 GOPROXY 配置错误时,
go get可能回退到本地缓存的过期版本(比如 v2.30),而你根本不知道 - 项目根目录下已有
go.sum且含旧 hash,go get不会自动更新它,得加-u或手动go mod tidy - IDE(如 GoLand)有时缓存 import 提示,重启索引或 invalidate caches 才能识别新包
真正保险的做法是:安装后立刻 go list -m github.com/gofiber/fiber/v2,输出必须带明确版本号,且与 go.dev 上 v2 最新 tag 一致。
v3 的诱惑在于新特性,但生产环境里,一个没被日志中间件拖垮的 fiber.New(),比所有新 API 都重要。











