Fiber 应用需显式注册路由和404处理器,调用 app.Listen() 启动并阻塞执行,监听地址必须显式指定(如 ":3000"),静态文件用 app.Static(),404 处理器须置于所有路由之后、Listen 之前。

Fiber 默认不自动处理静态文件或 404,必须显式注册路由和错误处理器,否则访问任意路径都可能返回空白或 panic。
如何正确初始化 Fiber 应用并监听端口
Fiber 启动本质是调用 app.Listen(),它会阻塞当前 goroutine,所以不能放在函数末尾后还执行其他逻辑。常见误写是先调 app.Listen() 再写日志或初始化 DB,结果日志根本不会打印。
- 监听地址默认是
":3000",传空字符串会 panic,必须显式指定(如":8080"或"127.0.0.1:3000") - 若需复用已有
net.Listener(例如配合 systemd socket activation),改用app.Listener(lis) - 开发时建议加超时控制:
app.Listen(":3000", fiber.ListenConfig{ReadTimeout: 5 * time.Second})
GET/POST 路由注册与参数提取方式
Fiber 的路由方法(Get、Post 等)返回值是 *fiber.App,支持链式调用,但中间件注册顺序会影响行为——比如 app.Use(logger.New()) 必须在 app.Get() 前,否则日志不生效。
- URL 参数用
c.Params("id")(对应/user/:id) - 查询参数用
c.Query("page")(对应?page=2) - 表单数据优先用
c.Body() + json.Unmarshal,c.FormValue()仅适用于application/x-www-form-urlencoded - 不要在 handler 里直接调
panic(),应统一用c.Status(500).SendString("error")或自定义错误中间件
静态文件服务与 404 处理必须手动配置
Fiber 不像 Express 默认托管 public/,也不内置 404 页面;所有未匹配路由都会触发默认 404 响应体(空内容 + 404 状态码),前端可能误判为网络错误。
使用 uber-go/dig 在 Golang 中实现依赖注入——基于反射容器,提供 Provide/Invoke、dig.In/dig.Out 参数与结果对象,支持命名依赖等
- 静态文件:用
app.Static("/static", "./public"),注意第二个参数是磁盘路径,不是 URL 前缀 - 404 处理器:必须在所有
Get/Post之后、Listen之前加app.Use(func(c *fiber.Ctx) error { return c.Status(404).SendFile("./public/404.html") }) - 如果用了
app.All("*", ...)拦截所有方法,要确保它在静态路由之后,否则/static/logo.png也会被覆盖
为什么启动后访问 127.0.0.1:3000 返回空白或 connection refused
最常见原因是:没调 app.Listen()、端口被占用、防火墙拦截,或监听地址写成 "localhost:3000"(某些系统解析失败)。另一个隐蔽问题是 go run main.go 后终端无输出,其实是正常——Fiber 默认不打启动日志。
- 加启动提示:
log.Println("Server started on :3000")放在app.Listen()前(它会阻塞,所以这句必须在前) - 检查端口占用:
lsof -i :3000(macOS/Linux)或netstat -ano | findstr :3000(Windows) - 用
curl -v http://127.0.0.1:3000看响应头,确认是否真收到 404 还是连接失败
真正容易被忽略的是:Fiber 的 ctx.Next() 不会自动跳到下一个匹配路由,只用于中间件链;路由匹配完全靠注册顺序和路径模式,没有“fallback 路由”概念——写错顺序,就真的 404 了。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










