直接用 fiber.New() 启动最简服务,无需先学中间件或路由分组;注意 import 路径和 go mod 初始化;c.SendString() 是初学者最安全的响应方式;路径参数用 c.Params()、查询参数用 c.Query();app.Listen() 后必须处理 error。

直接用 fiber.New() 启动,别绕弯
不用先学中间件、路由分组或配置项,fiber.New() 默认配置就能跑通最简服务。它比标准库 net/http 少写几行,又比 Gin 更轻——关键是没有隐藏初始化逻辑,app := fiber.New() 之后直接挂路由、监听端口就行。
常见错误是手动 import 错路径(比如漏掉 /v2)或 go mod 没初始化。确保执行过:
go mod init myappgo get github.com/gofiber/fiber/v2
然后复制粘贴以下代码到 main.go,go run main.go 就能访问 http://localhost:3000 看到响应。
app.Get() 和 c.SendString() 是最稳的起点
初学者最容易卡在上下文(*fiber.Ctx)怎么返回内容。记住:只要不是 JSON 或文件,c.SendString() 最安全;它不序列化、不设 header、不校验类型,纯文本直出。
别一上来就用 c.JSON() —— 它会自动设 Content-Type: application/json,但如果你传的是普通字符串(比如 "hello"),Go 会报类型错误;也别用 c.Status().Send() 组合,容易漏 status 导致前端收不到 200。
示例中这三行是黄金组合:
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, Fiber!")
})
路径参数和查询参数别混用 c.Params() 与 c.Query()
实际开发第一处业务需求通常是“查某个 ID 的用户”,这时你会遇到两种传参方式:
-
/user/123→ 用c.Params("id"),前提是路由定义为app.Get("/user/:id", ...) -
/user?id=123→ 用c.Query("id"),不需要改路由定义
容易踩的坑:c.Params() 返回的是 string,但值只在 handler 内有效(因为底层复用内存)。如果想存下来做后续处理,得显式拷贝:
idStr := utils.CopyString(c.Params("id")) // 要 import "github.com/gofiber/fiber/v2/utils"
或者初始化 app 时打开 Immutable: true 配置,但会轻微影响性能——小项目无所谓,高并发服务慎开。
app.Listen() 后必须加 log.Fatal() 或显式处理 error
很多人跑起来没反应,其实是 app.Listen(":3000") 失败了但被忽略。端口被占、权限不足、IPv6 不可用等情况都会返回 error,而默认不 panic。
正确写法是:
if err := app.Listen(":3000"); err != nil {
log.Fatalf("server start failed: %v", err)
}
或者更简洁地沿用官方惯用法:log.Fatal(app.Listen(":3000"))。别省这一行,否则进程静默退出,连日志都看不到。
另外,app.Listen() 是阻塞调用,后面代码不会执行——所以中间件注册、路由定义必须放在这之前;而数据库连接、缓存初始化等耗时操作,建议放在 main() 开头,别塞进 handler 里。











