fiber 搭建 rest 接口需先执行 go mod init myapi 初始化模块,再运行 go mod tidy 自动下载 github.com/gofiber/fiber/v2;编写 main.go 调用 fiber.new() 创建实例,定义标准 http 路由(get/post/put/delete),处理 json 时注意 content-type 校验、结构体 json tag、查询参数类型转换,并配置监听地址与读写超时以保障生产安全。

直接用 Fiber 搭 REST 接口,不用绕弯子:它默认支持 JSON、路由参数、中间件、错误处理,开箱即用,go run main.go 启动后就能收请求。
初始化项目并引入 Fiber
别手动 go get,直接初始化模块 + go mod tidy 自动拉取最新稳定版:
- 执行
go mod init myapi(模块名按需改) - 写个最简
main.go,调用fiber.New()创建实例 - 运行
go mod tidy,自动下载github.com/gofiber/fiber/v2 - 注意:Fiber v2 要求 Go ≥ 1.17,低于此版本会报
go: cannot find module providing package github.com/gofiber/fiber/v2
定义标准 REST 路由(GET/POST/PUT/DELETE)
Fiber 的路由语法贴近 HTTP 方法语义,但不强制要求资源复数命名或嵌套路由——你按业务来,它不拦着;但想符合 REST 规范,就照着资源粒度组织:
-
app.Get("/dogs", getAllDogs)—— 获取列表 -
app.Post("/dogs", createDog)—— 创建单个资源,Body 用c.Body()或结构体绑定 -
app.Get("/dogs/:id", getDogByID)——:id是路径参数,用c.Params("id")取值 -
app.Put("/dogs/:id", updateDog)—— 完整替换,建议配合gorm.Model的主键自动识别 -
app.Delete("/dogs/:id", deleteDog)—— 删除前务必校验:id是否合法(比如是否为数字)
处理 JSON 请求与响应的常见坑
Fiber 默认解析 JSON,但容易栽在三处:
- 客户端没发
Content-Type: application/json,c.Body()能读到字节,但c.Struct()或c.JSON()绑定会静默失败——加个if c.Get("Content-Type") != "application/json" { return c.Status(400).SendString("JSON required") } - 结构体字段没加
json:tag,导致c.JSON()返回空对象——例如Name string必须写成Name string `json:"name"` - 用
c.Query("page")取查询参数时,返回的是字符串,转int得自己调strconv.Atoi,Fiber 不做隐式转换
启动服务前必须检查的配置项
上线前最容易漏掉的是监听地址和超时控制:
- 别只写
app.Listen(":3000")—— 生产环境应绑定127.0.0.1:3000或通过反向代理暴露,避免0.0.0.0直接对外 - 默认无读写超时,大文件上传或慢查询可能卡死连接;建议加
fiber.Config{ReadTimeout: 10 * time.Second, WriteTimeout: 30 * time.Second} - 日志中间件
logger.New()默认输出到终端,容器化部署时要确认 stdout 是否被正确采集(比如 Docker logs 能否看到)
真正难的不是写完第一个 GET /health,而是后续加数据库、加验证、加中间件时,每个环节都依赖上下文传递方式——Fiber 的 c.Locals 是唯一安全的请求级存储,别试图往全局变量塞用户 ID 或 DB 实例。











