不能。swag 默认不支持 fiber,因其无法识别 *fiber.ctx 类型;需将 handler 移至非 main 包、用 -g 指定入口、加 --parsedependency 和 --parseinternal 参数,并规范 @param/@success 注释写法。

swag 能不能直接支持 Fiber?
不能。swag 默认只识别 Gin、Echo、Chi 等框架的 handler 函数签名(比如 *gin.Context),而 Fiber 的 func(c *fiber.Ctx) error 不在它的内置解析规则里。你直接给 Fiber handler 加 // @Router 注释,swag init 会扫到函数,但大概率报错 “failed to parse router function” 或直接跳过——因为它不认识 *fiber.Ctx 类型。
Fiber 项目怎么让 swag 正确扫描路由?
核心是绕过 swag 对框架上下文的校验,只让它提取注释元数据。必须满足三个条件:
- 所有 handler 函数得定义在非
mainpackage(比如package handler),且函数签名可被静态解析(参数类型不关键,但不能是未定义别名) - 入口文件(如
cmd/main.go)顶部写全// @title等全局注释,并用-g显式指定 - 运行
swag init时加--parseDependency和--parseInternal(如果 handler 在internal/下),否则跨包函数根本不会被读取
示例命令:swag init -g cmd/main.go -d internal/handler -o docs --parseDependency --parseInternal
Fiber 的 @Param 和 @Success 怎么写才不出错?
swag 不关心你用什么框架处理请求,只认注释里的字段定义和类型引用。容易踩的坑集中在类型写法上:
-
@Param id path int true "用户ID"✅ —— 路径参数只能用基础类型:string、int、bool,别写int64或自定义类型 -
@Param query query string false "搜索关键词"✅ —— 查询参数统一用string,swag 不解析url.Values结构 -
@Success 200 {object} models.User✅ ——models.User必须是导出结构体,字段带json:tag,且所在包路径要和 import 一致 - 别写
@Success 200 {array} []models.User❌ —— 正确写法是{array} models.User
生成后 Swagger UI 里看不到接口?检查这三处
常见现象是 docs/swagger.json 里 "paths":{} 为空。不是注释没写对,而是扫描链断了:
- handler 文件里没有
package handler声明,或声明拼错(比如packge handler)→ 整个文件被跳过 -
@Router /users [get]写成了@Router /users GET或漏了方括号 → 解析失败,该接口静默丢弃 - 结构体定义在另一个 module(比如
github.com/yourname/common),但没加// @modelsPackage github.com/yourname/common→@Success引用失效,连带整个 handler 被忽略
最省事的验证方式:删掉所有 handler,只留一个最简函数(带 @Summary 和 @Router),确认能出现在文档里,再逐步加回其他内容。Fiber 的集成难点不在框架本身,而在 swag 对跨包、跨 module、非标准上下文的容忍度极低——它只吃“干净”的注释和“明确”的路径。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











