🚀 App
Static
使用 Static 方法可以用来提供静态文件服务,比如 图片 (images)、CSS 和 JavaScript 文件。
info
默认情况下,Static 会在请求某个目录时自动返回index.html文件。
方法签名:
func (app *App) Static(prefix, root string, config ...Static) Router
如果你想提供一个叫 ./public 的目录里的文件,可以用下面的代码:
app.Static("/", "./public")// => http://localhost:3000/hello.html// => http://localhost:3000/js/jquery.js// => http://localhost:3000/css/style.css
示例:
// 提供多个目录的静态文件app.Static("/", "./public")// 提供 "./files" 目录的文件app.Static("/", "./files")
你可以为静态文件服务设置一个虚拟路径前缀(也就是这个路径在文件系统里并不存在),像这样:
示例:
app.Static("/static", "./public")// => http://localhost:3000/static/hello.html// => http://localhost:3000/static/js/jquery.js// => http://localhost:3000/static/css/style.css
如果你想对静态文件服务做更多设置,可以使用 fiber.Static 结构体开启自定义配置。
fiber.Static{} 配置项:
// Static 定义了提供静态资源服务时的配置选项。type Static struct {// 开启后会缓存压缩后的文件,减少 CPU 使用率,// 和 github.com/gofiber/compression 中间件不一样。Compress bool `json:"compress"` // 可选,默认 false// 开启后支持 Byte-Range 请求。ByteRange bool `json:"byte_range"` // 可选,默认 false// 开启目录浏览功能。Browse bool `json:"browse"` // 可选,默认 false// 开启后直接下载文件。Download bool `json:"download"` // 可选,默认 false// 设置目录的 index 文件名,默认是 "index.html"Index string `json:"index"`// 设置非活跃文件 handler 的过期时间。// 使用负数表示禁用缓存。CacheDuration time.Duration `json:"cache_duration"`// 设置 Cache-Control HTTP 头的 MaxAge,单位为秒。MaxAge int `json:"max_age"`// 修改响应的函数。ModifyResponse Handler// 设置跳过这个中间件的函数,返回 true 时跳过。Next func(c *Ctx) bool}
示例:
// 自定义配置示例app.Static("/", "./public", fiber.Static{Compress: true,ByteRange: true,Browse: true,Index: "john.html",CacheDuration: 10 * time.Second,MaxAge: 3600,})
Route Handlers
用来注册某个特定 HTTP method 的路由。
方法签名:
// 常见的 HTTP 方法func (app *App) Get(path string, handlers ...Handler) Routerfunc (app *App) Head(path string, handlers ...Handler) Routerfunc (app *App) Post(path string, handlers ...Handler) Routerfunc (app *App) Put(path string, handlers ...Handler) Routerfunc (app *App) Delete(path string, handlers ...Handler) Routerfunc (app *App) Connect(path string, handlers ...Handler) Routerfunc (app *App) Options(path string, handlers ...Handler) Routerfunc (app *App) Trace(path string, handlers ...Handler) Routerfunc (app *App) Patch(path string, handlers ...Handler) Router// 指定 method 注册路由func (app *App) Add(method, path string, handlers ...Handler) Router// 注册所有方法的路由// 类似 app.Use,但不会绑定到前缀func (app *App) All(path string, handlers ...Handler) Router
示例:
// 简单的 GET handlerapp.Get("/api/list", func(c *fiber.Ctx) error {return c.SendString("I'm a GET request!")})// 简单的 POST handlerapp.Post("/api/register", func(c *fiber.Ctx) error {return c.SendString("I'm a POST request!")})
Use 方法用于中间件包和路径前缀的捕获。这些路由只会匹配路径的开头部分,比如 /john 会匹配 /john/doe、/johnnnnn 等。
方法签名:
func (app *App) Use(args ...interface{}) Router
示例:
// 匹配所有请求app.Use(func(c *fiber.Ctx) error {return c.Next()})// 匹配以 /api 开头的请求app.Use("/api", func(c *fiber.Ctx) error {return c.Next()})// 同时匹配 /api 和 /home 开头的请求app.Use([]string{"/api", "/home"}, func(c *fiber.Ctx) error {return c.Next()})// 注册多个 handlerapp.Use("/api", func(c *fiber.Ctx) error {c.Set("X-Custom-Header", random.String(32))return c.Next()}, func(c *fiber.Ctx) error {return c.Next()})
Mount
你可以通过创建一个 *Mount 实例,把另一个 Fiber 应用挂载进去。
方法签名:
func (a *App) Mount(prefix string, app *App) Router
示例:
func main() {app := fiber.New()micro := fiber.New()app.Mount("/john", micro) // GET /john/doe -> 200 OKmicro.Get("/doe", func(c *fiber.Ctx) error {return c.SendStatus(fiber.StatusOK)})log.Fatal(app.Listen(":3000"))}
MountPath
MountPath 属性会返回当前子应用被挂载的完整路径。
方法签名:
func (app *App) MountPath() string
示例:
func main() {app := fiber.New()one := fiber.New()two := fiber.New()three := fiber.New()two.Mount("/three", three)one.Mount("/two", two)app.Mount("/one", one)one.MountPath() // "/one"two.MountPath() // "/one/two"three.MountPath() // "/one/two/three"app.MountPath() // ""}
注意
MountPath 的顺序很重要,要从最深的 app 开始挂载才能获取到正确的路径。
Group
可以通过创建 *Group 对象来对路由进行分组。
方法签名:
func (app *App) Group(prefix string, handlers ...Handler) Router
示例:
func main() {app := fiber.New()api := app.Group("/api", handler) // /apiv1 := api.Group("/v1", handler) // /api/v1v1.Get("/list", handler) // /api/v1/listv1.Get("/user", handler) // /api/v1/userv2 := api.Group("/v2", handler) // /api/v2v2.Get("/list", handler) // /api/v2/listv2.Get("/user", handler) // /api/v2/userlog.Fatal(app.Listen(":3000"))}
Route
你可以使用 Route 方法在某个公共前缀下定义一组路由。
方法签名:
func (app *App) Route(prefix string, fn func(router Router), name ...string) Router
示例:
func main() {app := fiber.New()app.Route("/test", func(api fiber.Router) {api.Get("/foo", handler).Name("foo") // /test/foo (name: test.foo)api.Get("/bar", handler).Name("bar") // /test/bar (name: test.bar)}, "test.")log.Fatal(app.Listen(":3000"))}
Server
Server 返回底层的 fasthttp server。
方法签名:
func (app *App) Server() *fasthttp.Server
示例:
func main() {app := fiber.New()app.Server().MaxConnsPerIP = 1// ...}
Server Shutdown
Shutdown 可以优雅地关闭服务器,不会中断当前活跃的连接。
ShutdownWithTimeout 会在指定时间后强制关闭所有连接。
ShutdownWithContext 会根据 context 的超时设置来决定是否强制关闭。
func (app *App) Shutdown() errorfunc (app *App) ShutdownWithTimeout(timeout time.Duration) errorfunc (app *App) ShutdownWithContext(ctx context.Context) error
HandlersCount
返回注册的 handler 数量。
方法签名:
func (app *App) HandlersCount() uint32
Stack
返回原始的路由栈。
方法签名:
func (app *App) Stack() [][]*Route
示例:
var handler = func(c *fiber.Ctx) error { return nil }func main() {app := fiber.New()app.Get("/john/:age", handler)app.Post("/register", handler)data, _ := json.MarshalIndent(app.Stack(), "", " ")fmt.Println(string(data))app.Listen(":3000")}
Name
为最近创建的路由设置名称。
方法签名:
func (app *App) Name(name string) Router
GetRoute
根据名称获取路由对象。
方法签名:
func (app *App) GetRoute(name string) Route
✅ GetRoutes
作用:获取所有注册的路由。
func (app *App) GetRoutes(filterUseOption ...bool) []Route
filterUseOption为true时,会过滤掉由中间件注册的路由。
示例:
app := fiber.New()app.Post("/", func (c *fiber.Ctx) error {return c.SendString("Hello, World!")}).Name("index")data, _ := json.MarshalIndent(app.GetRoutes(true), "", " ")fmt.Print(string(data))
输出:
[{"method": "POST","name": "index","path": "/","params": null}]
✅ Config
作用:返回应用的配置(只读)。
func (app *App) Config() Config
✅ Handler
作用:返回 fasthttp 兼容的 Handler,用来自定义处理请求。
func (app *App) Handler() fasthttp.RequestHandler
✅ Listen
作用:监听指定地址的 HTTP 请求。
func (app *App) Listen(addr string) error
示例:
app.Listen(":8080")app.Listen("127.0.0.1:8080")
✅ ListenTLS
作用:使用 TLS 证书和私钥监听 HTTPS 请求。
func (app *App) ListenTLS(addr, certFile, keyFile string) error
默认 TLS 配置:
&tls.Config{MinVersion: tls.VersionTLS12,Certificates: []tls.Certificate{cert},}
✅ ListenTLSWithCertificate
作用:直接使用 tls.Certificate 对象监听 HTTPS。
func (app *App) ListenTLS(addr string, cert tls.Certificate) error
✅ ListenMutualTLS
作用:启用双向 TLS 验证,使用服务器证书 + 客户端 CA 验证。
func (app *App) ListenMutualTLS(addr, certFile, keyFile, clientCertFile string) error
默认配置:
&tls.Config{MinVersion: tls.VersionTLS12,ClientAuth: tls.RequireAndVerifyClientCert,ClientCAs: clientCertPool,Certificates: []tls.Certificate{cert},}
✅ ListenMutualTLSWithCertificate
作用:直接用 tls.Certificate 和 *x509.CertPool 启动双向认证。
func (app *App) ListenMutualTLSWithCertificate(addr string, cert tls.Certificate, clientCertPool *x509.CertPool) error
✅ Listener
作用:使用你自定义的 net.Listener 监听(可用于完全自定义 TLS 设置)。
func (app *App) Listener(ln net.Listener) error
示例:
ln, _ := net.Listen("tcp", ":3000")cer, _ := tls.LoadX509KeyPair("server.crt", "server.key")ln = tls.NewListener(ln, &tls.Config{Certificates: []tls.Certificate{cer},})app.Listener(ln)
✅ Test
作用:测试 HTTP 路由和响应。可用于单元测试或调试。
func (app *App) Test(req *http.Request, msTimeout ...int) (*http.Response, error)
示例:
app.Get("/", func(c *fiber.Ctx) error {return c.SendString("hello, World!")})req := httptest.NewRequest("GET", "http://localhost/", nil)resp, _ := app.Test(req)
✅ Hooks
作用:返回 Fiber 应用的 Hook 配置(生命周期钩子)。
func (app *App) Hooks() *Hooks
