重装Fiber需四步:清模块缓存(go clean -modcache或精准删除)、删vendor并重新生成、检查import路径为github.com/gofiber/fiber/v2、替换fiber.Default()为fiber.New()。

go get 重装前必须清理旧版本缓存
Fiber 不像 npm 或 pip 那样有显式的 uninstall 命令;go get 实际是下载并缓存模块到 $GOPATH/pkg/mod,重复执行不会覆盖,而是新增版本记录。直接 go get github.com/gofiber/fiber/v2 可能拉到本地已缓存的旧版 v2.50,而非最新 v2.54 —— 尤其当你之前用过 @v2.50 显式指定过版本。
实操建议:
- 删掉模块缓存:
go clean -modcache(注意:这会清空所有 Go 模块缓存,不只是 Fiber) - 或精准清理:
rm -rf $GOPATH/pkg/mod/github.com/gofiber/fiber@* - 再执行
go get github.com/gofiber/fiber/v2@latest,明确强制拉取最新 tagged 版本 - 验证是否生效:
go list -m github.com/gofiber/fiber/v2应输出类似github.com/gofiber/fiber/v2 v2.54.0
vendor 目录残留会导致重装失效
如果你项目启用了 go mod vendor,那么 vendor/ 目录里存的是上次 go mod vendor 时锁定的 Fiber 版本。即使你 go get -u 升级了模块缓存,go build 仍会优先读 vendor/ 里的旧代码 —— 这就是“明明重装了却还是旧行为”的根本原因。
实操建议:
- 删掉
vendor/目录:rm -rf vendor - 重新生成:
go mod vendor - 检查
vendor/modules.txt中github.com/gofiber/fiber/v2行是否对应你期望的版本号 - 若项目 CI/CD 使用
go build -mod=vendor,务必确保这步在构建前完成
import 路径写错会让重装完全无效
Go 的 import 路径和模块版本强绑定。写成 import "github.com/gofiber/fiber"(缺 /v2)会触发 Go 的 “major version zero” 兼容逻辑,实际加载的是 v1 兼容层(早已废弃),不是你 go get 的 v2。更隐蔽的是:有人把 v2 写成 V2 或 v2.0,Go 会静默降级为 v0.0.0-xxx 伪版本,编译通过但运行时报 undefined: fiber.New。
实操建议:
- 全项目搜索 import 行:
grep -r "github.com/gofiber/fiber" . --include="*.go" - 确认每处都是严格小写:
github.com/gofiber/fiber/v2(v2 不可省略,不可大写) - 如果混用了 v2 和 v3 的 import(比如部分文件写
/v3),go build会报multiple copies of package - 别依赖 IDE 自动补全——它可能缓存了旧路径,手动删掉再敲一遍
github.com/gofiber/fiber/v2
fiber.Default() 不是安装问题,是初始化陷阱
很多人以为“重装 Fiber 就能修好日志泄露或 TTFB 高”,结果重装完还是每秒几百条 Authorization 日志。这不是安装问题,而是代码里还在用 fiber.Default()。这个函数在 v2.40+ 已被标记为 deprecated,但它没报错,只是默默启用一堆生产环境不该开的中间件。
实操建议:
- 全局搜索
fiber.Default(),全部替换成fiber.New() - 检查是否漏掉了嵌套调用,比如
app := myinit()里封装了Default() - 加一行启动校验:
if fiber.Default != nil { panic("fiber.Default() used in production") }(虽然不能真这么写,但可在 init 函数里打日志提醒) - 真正要“重置”的不是模块,而是你的初始化逻辑:删掉所有自动中间件,按需加
logger.New()、recover.New()等


















