必须用 fiber.new() 创建已初始化的 app 实例,不可直接使用未初始化的 fiber.app{};调用 app.listen() 即可启动服务,https 需用 app.listentls 并确保证书完整、私钥未加密。

直接上手就能跑通,不需要额外配置或中间件,fiber.New() 创建实例后绑定几个路由,调用 app.Listen() 就能启动服务。
怎么创建一个可运行的 Fiber 实例
必须用 fiber.New() 初始化,不能只写 fiber.App{} —— 后者是未初始化结构体,直接调用 Listen 会 panic。v2 和 v3 都要求显式构造:
-
fiber.New()返回完整初始化的*fiber.App(v2)或fiber.App(v3),内部已准备好路由树、中间件栈和上下文池 - 如果传入
fiber.Config,注意 v3 中CaseSensitive默认为true,而 v2 是false;大小写敏感会影响/API和/api是否匹配同一路由 - 不传 Config 时,v2/v3 均启用默认日志中间件,控制台会输出请求日志;如需关闭,显式设置
DisableStartupMessage: true
路由定义和参数解析常见写法
Fiber 的路由语法接近 Express,但参数提取方式更严格,尤其注意路径参数和查询参数的获取时机:
- 路径参数用冒号声明:
app.Get("/user/:id", ...),取值必须用c.Params("id"),不是c.Query("id") - 查询参数(URL ? 后面)统一用
c.Query("key"),支持默认值:c.Query("page", "1") - 表单或 JSON 数据绑定推荐用
c.BodyParser(&v),它自动识别Content-Type并解码;若手动读c.Body(),记得检查返回 error,空 body 时可能返回nil但不是成功状态 - v3 中
fiber.Ctx是接口类型,不能再做指针比较或强转为 *fiber.Ctx,否则编译失败
HTTPS 启动必须用 app.ListenTLS
别试图套 http.ListenAndServeTLS,Fiber 的 *fiber.App 不实现 http.Handler 接口,硬塞进去会报 cannot use app (type *fiber.App) as type http.Handler:
- 正确写法:
app.ListenTLS(":443", "fullchain.pem", "key.pem"),证书路径必须是完整链(含中间 CA),否则 iOS/Java 客户端握手失败 - 私钥不能加密,否则 TLS 握手阶段静默卡住,无明确错误提示;可用
openssl rsa -in key.pem.enc -out key.pem解密 - 如需设置超时,得放弃
ListenTLS,改用app.Listener()+ 手动构造http.Server,再调srv.ListenAndServeTLS
监听地址和端口容易被忽略的细节
app.Listen(":3000") 看似简单,但实际部署时几个边界情况常导致启动失败:
- 端口被占用时,错误信息是
listen tcp :3000: bind: address already in use,但 Fiber 不会自动重试或换端口,需自行捕获net.Listen级 error - 绑定
localhost:3000只响应本地请求,外部无法访问;要监听所有网卡,必须用:3000或0.0.0.0:3000 - Linux 下非 root 用户无法绑定 1–1023 端口(如
:80),要么加sudo,要么用反向代理(如 Nginx/Traefik)转发 - v3 默认启用
Prefork模式(多进程),若在容器中运行且未禁用,可能因 fork 失败或信号处理异常导致 crash,建议容器环境显式设Prefork: false











