Fiber is an Express inspired web framework built on top of Fasthttp , the fastest HTTP engine for Go . Designed to ease things up for fast development with zero memory allocation and performance in mind.
## ⚙️ 安装
Fiber 需要 **Go 版本 `1.25` 或更高版本** 才能运行。如果您需要安装或升级 Go,请访问 [Go 官方下载页面](https://go.dev/dl/)。要开始设置您的项目,请为您的项目创建一个新目录并进入其中。然后,通过在终端中执行以下命令,使用 Go modules 初始化您的项目:
```
go mod init github.com/your/repo
```
要了解更多关于 Go modules 及其工作原理的信息,您可以查阅 [Using Go Modules](https://go.dev/blog/using-go-modules) 博客文章。
设置好项目后,您可以使用 `go get` 命令安装 Fiber:
```
go get -u github.com/gofiber/fiber/v3
```
此命令会获取 Fiber 包并将其添加到项目的依赖项中,让您可以开始使用 Fiber 构建 Web 应用程序。
## ⚡️ 快速入门
上手 Fiber 非常容易。这是一个基础示例,用于创建一个简单的 Web 服务器,它在根路径上响应 "Hello, World 👋!"。此示例演示了初始化一个新的 Fiber app、设置路由以及启动服务器。
```
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func main() {
// Initialize a new Fiber app
app := fiber.New()
// Define a route for the GET method on the root path '/'
app.Get("/", func(c fiber.Ctx) error {
// Send a string response to the client
return c.SendString("Hello, World 👋!")
})
// Start the server on port 3000
log.Fatal(app.Listen(":3000"))
}
```
这个简单的服务器易于设置和运行。它介绍了 Fiber 的核心概念:app 初始化、路由定义和启动服务器。只需运行此 Go 程序,并在浏览器中访问 `http://localhost:3000` 即可查看消息。
## 零分配
Fiber 针对**高性能**进行了优化,这意味着从 **fiber.Ctx** 返回的值默认**不是**不可变的,并且**将**在请求之间被重用。根据经验,您**必须**仅在 handler 内使用上下文值,并且**不得**保留任何引用。一旦您从 handler 返回,从上下文中获取的任何值都将用于未来的请求中。访问我们的[文档](https://docs.gofiber.io/#zero-allocation)了解更多信息。
## 🤖 基准测试
这些测试由 [TechEmpower](https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=plaintext) 执行。如果您想查看所有结果,请访问我们的 [Wiki](https://docs.gofiber.io/extra/benchmarks)。
## 🎯 特性
- 强大的 [路由](https://docs.gofiber.io/guide/routing)
- 提供 [静态文件](https://docs.gofiber.io/api/app#static)
- 极致的 [性能](https://docs.gofiber.io/extra/benchmarks)
- [低内存](https://docs.gofiber.io/extra/benchmarks) 占用
- [API 端点](https://docs.gofiber.io/api/ctx)
- [中间件](https://docs.gofiber.io/category/-middleware) & [Next](https://docs.gofiber.io/api/ctx#next) 支持
- [快速](https://dev.to/koddr/welcome-to-fiber-an-express-js-styled-fastest-web-framework-written-with-on-golang-497) 的服务器端编程
- [模板引擎](https://github.com/gofiber/template)
- [WebSocket 支持](https://github.com/gofiber/contrib/tree/main/websocket)
- [Socket.io 支持](https://github.com/gofiber/contrib/tree/main/socketio)
- [Server-Sent Events](https://github.com/gofiber/recipes/tree/master/sse)
- [Rate Limiter](https://docs.gofiber.io/api/middleware/limiter)
- 以及更多,[探索 Fiber](https://docs.gofiber.io/)
## 💡 理念
从 [Node.js](https://nodejs.org/en/about/) 转到 [Go](https://go.dev/doc/) 的新 Gophers 在开始构建其 Web 应用程序或微服务之前,都要经历一段学习曲线。Fiber 作为一个 **Web 框架**,是本着**极简主义**的理念创建的,并遵循 **UNIX 方式**,以便新的 Gophers 能够在热烈和信任的欢迎下快速进入 Go 的世界。
Fiber 的灵感来源于 Internet 上最流行的 Web 框架 Express。我们结合了 Express 的**易用性**和 Go 的**原始性能**。如果您曾经在 Node.js 中实现过 Web 应用程序(*使用 Express 或类似框架*),那么许多方法和原则对您来说会感到**非常熟悉**。
我们在 [issues](https://github.com/gofiber/fiber/issues)、Discord [频道](https://gofiber.io/discord) *以及整个 Internet* 上**倾听**用户的意见,以创建一个**快速**、**灵活**且**友好**的 Go Web 框架,适用于**任何**任务、**截止日期**和开发者**技能**!就像 Express 在 JavaScript 领域所做的那样。
## ⚠️ 限制
- 由于 Fiber 使用了 unsafe,该库可能并不总是与最新的 Go 版本兼容。Fiber v3 已在 Go 1.25 或更高版本上进行了测试。
- 当您在路由器上注册常见的 `net/http` handler 形状时,Fiber 会自动适配它们,并且当您需要桥接整个应用程序或 `net/http` 中间件时,您仍然可以使用 [adaptor 中间件](https://docs.gofiber.io/next/middleware/adaptor/)。
### net/http 兼容性
Fiber 可以与标准库并行运行。路由器直接接受现有的 `net/http` handler,甚至可以与原生 `fasthttp.RequestHandler` 回调一起使用,因此您可以插入旧版端点而无需手动包装它们:
```
package main
import (
"log"
"net/http"
"github.com/gofiber/fiber/v3"
)
func main() {
httpHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if _, err := w.Write([]byte("served by net/http")); err != nil {
panic(err)
}
})
app := fiber.New()
app.Get("/", httpHandler)
// Start the server on port 3000
log.Fatal(app.Listen(":3000"))
}
```
当您需要转换整个应用程序或重用 `net/http` 中间件链时,请依赖 [adaptor 中间件](https://docs.gofiber.io/next/middleware/adaptor/)。它双向转换 handler 和中间件,甚至允许您将 Fiber app 挂载到 `net/http` 服务器中。
### Express 风格的 Handler
Fiber 还适配了在轻量级 `fiber.Req` 和 `fiber.Res` 辅助接口上操作的 Express 风格回调。这使您可以从受 Express 启发的代码库移植中间件和路由 handler,同时保留 Fiber 的路由功能:
```
// Request/response handlers (2-argument)
app.Get("/", func(req fiber.Req, res fiber.Res) error {
return res.SendString("Hello from Express-style handlers!")
})
// Middleware with an error-returning next callback (3-argument)
app.Use(func(req fiber.Req, res fiber.Res, next func() error) error {
if req.IP() == "192.168.1.254" {
return res.SendStatus(fiber.StatusForbidden)
}
return next()
})
// Middleware with a no-arg next callback (3-argument)
app.Use(func(req fiber.Req, res fiber.Res, next func()) {
if req.Get("X-Skip") == "true" {
return // stop the chain without calling next
}
next()
})
```
## 👀 示例
下面列出了一些常见的示例。如果您想查看更多代码示例,请访问我们的 [Recipes 仓库](https://github.com/gofiber/recipes) 或访问我们托管的 [API 文档](https://docs.gofiber.io)。
### 📖 [**基础路由**](https://docs.gofiber.io/#basic-routing)
```
package main
import (
"fmt"
"log"
"github.com/gofiber/fiber/v3"
)
func main() {
app := fiber.New()
// GET /api/register
app.Get("/api/*", func(c fiber.Ctx) error {
msg := fmt.Sprintf("✋ %s", c.Params("*"))
return c.SendString(msg) // => ✋ register
})
// GET /flights/LAX-SFO
app.Get("/flights/:from-:to", func(c fiber.Ctx) error {
msg := fmt.Sprintf("💸 From: %s, To: %s", c.Params("from"), c.Params("to"))
return c.SendString(msg) // => 💸 From: LAX, To: SFO
})
// GET /dictionary.txt
app.Get("/:file.:ext", func(c fiber.Ctx) error {
msg := fmt.Sprintf("📃 %s.%s", c.Params("file"), c.Params("ext"))
return c.SendString(msg) // => 📃 dictionary.txt
})
// GET /john/75
app.Get("/:name/:age/:gender?", func(c fiber.Ctx) error {
msg := fmt.Sprintf("👴 %s is %s years old", c.Params("name"), c.Params("age"))
return c.SendString(msg) // => 👴 john is 75 years old
})
// GET /john
app.Get("/:name", func(c fiber.Ctx) error {
msg := fmt.Sprintf("Hello, %s 👋!", c.Params("name"))
return c.SendString(msg) // => Hello john 👋!
})
log.Fatal(app.Listen(":3000"))
}
```
#### 📖 [**路由命名**](https://docs.gofiber.io/api/app#name)
```
package main
import (
"encoding/json"
"fmt"
"log"
"github.com/gofiber/fiber/v3"
)
func main() {
app := fiber.New()
app.Get("/api/*", func(c fiber.Ctx) error {
msg := fmt.Sprintf("✋ %s", c.Params("*"))
return c.SendString(msg) // => ✋ register
}).Name("api")
route := app.GetRoute("api")
data, _ := json.MarshalIndent(route, "", " ")
fmt.Println(string(data))
// Prints:
// {
// "method": "GET",
// "name": "api",
// "path": "/api/*",
// "params": [
// "*1"
// ]
// }
log.Fatal(app.Listen(":3000"))
}
```
#### 📖 [**提供静态文件**](https://docs.gofiber.io/api/app#static)
```
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/static"
)
func main() {
app := fiber.New()
// Serve static files from the "./public" directory
app.Get("/*", static.New("./public"))
// => http://localhost:3000/js/script.js
// => http://localhost:3000/css/style.css
app.Get("/prefix*", static.New("./public"))
// => http://localhost:3000/prefix/js/script.js
// => http://localhost:3000/prefix/css/style.css
// Serve a single file for any unmatched routes
app.Get("*", static.New("./public/index.html"))
// => http://localhost:3000/any/path/shows/index.html
log.Fatal(app.Listen(":3000"))
}
```
#### 📖 [**中间件 & Next**](https://docs.gofiber.io/api/ctx#next)
```
package main
import (
"fmt"
"log"
"github.com/gofiber/fiber/v3"
)
func main() {
app := fiber.New()
// Middleware that matches any route
app.Use(func(c fiber.Ctx) error {
fmt.Println("🥇 First handler")
return c.Next()
})
// Middleware that matches all routes starting with /api
app.Use("/api", func(c fiber.Ctx) error {
fmt.Println("🥈 Second handler")
return c.Next()
})
// GET /api/list
app.Get("/api/list", func(c fiber.Ctx) error {
fmt.Println("🥉 Last handler")
return c.SendString("Hello, World 👋!")
})
log.Fatal(app.Listen(":3000"))
}
```
📚 显示更多代码示例
### 视图引擎
📖 [Config](https://docs.gofiber.io/api/fiber#config)
📖 [Engines](https://github.com/gofiber/template)
📖 [Render](https://docs.gofiber.io/api/ctx#render)
当未设置视图引擎时,Fiber 默认使用 [html/template](https://pkg.go.dev/html/template/)。
如果您想执行 partials 或使用不同的引擎,如 [amber](https://github.com/eknkc/amber)、[handlebars](https://github.com/aymerick/raymond)、[mustache](https://github.com/cbroglie/mustache) 或 [pug](https://github.com/Joker/jade) 等,请查看我们的 [Template](https://github.com/gofiber/template) 包,它支持多种视图引擎。
```
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/template/pug"
)
func main() {
// Initialize a new Fiber app with Pug template engine
app := fiber.New(fiber.Config{
Views: pug.New("./views", ".pug"),
})
// Define a route that renders the "home.pug" template
app.Get("/", func(c fiber.Ctx) error {
return c.Render("home", fiber.Map{
"title": "Homepage",
"year": 1999,
})
})
log.Fatal(app.Listen(":3000"))
}
```
### 将路由分组成链
📖 [Group](https://docs.gofiber.io/api/app#group)
```
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func middleware(c fiber.Ctx) error {
log.Println("Middleware executed")
return c.Next()
}
func handler(c fiber.Ctx) error {
return c.SendString("Handler response")
}
func main() {
app := fiber.New()
// Root API group with middleware
api := app.Group("/api", middleware) // /api
// API v1 routes
v1 := api.Group("/v1", middleware) // /api/v1
v1.Get("/list", handler) // /api/v1/list
v1.Get("/user", handler) // /api/v1/user
// API v2 routes
v2 := api.Group("/v2", middleware) // /api/v2
v2.Get("/list", handler) // /api/v2/list
v2.Get("/user", handler) // /api/v2/user
log.Fatal(app.Listen(":3000"))
}
```
### 中间件 Logger
📖 [Logger](https://docs.gofiber.io/api/middleware/logger)
```
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/logger"
)
func main() {
app := fiber.New()
// Use Logger middleware
app.Use(logger.New())
// Define routes
app.Get("/", func(c fiber.Ctx) error {
return c.SendString("Hello, Logger!")
})
log.Fatal(app.Listen(":3000"))
}
```
### 跨域资源共享 (CORS)
📖 [CORS](https://docs.gofiber.io/api/middleware/cors)
```
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/cors"
)
func main() {
app := fiber.New()
// Use CORS middleware with default settings
app.Use(cors.New())
// Define routes
app.Get("/", func(c fiber.Ctx) error {
return c.SendString("CORS enabled!")
})
log.Fatal(app.Listen(":3000"))
}
```
通过在 `Origin` 头中传递任何域来检查 CORS:
```
curl -H "Origin: http://example.com" --verbose http://localhost:3000
```
### 自定义 404 响应
📖 [HTTP Methods](https://docs.gofiber.io/api/ctx#status)
```
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func main() {
app := fiber.New()
// Define routes
app.Get("/", static.New("./public"))
app.Get("/demo", func(c fiber.Ctx) error {
return c.SendString("This is a demo page!")
})
app.Post("/register", func(c fiber.Ctx) error {
return c.SendString("Registration successful!")
})
// Middleware to handle 404 Not Found
app.Use(func(c fiber.Ctx) error {
return c.SendStatus(fiber.StatusNotFound) // => 404 "Not Found"
})
log.Fatal(app.Listen(":3000"))
}
```
### JSON 响应
📖 [JSON](https://docs.gofiber.io/api/ctx#json)
```
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
app := fiber.New()
// Route that returns a JSON object
app.Get("/user", func(c fiber.Ctx) error {
return c.JSON(&User{"John", 20})
// => {"name":"John", "age":20}
})
// Route that returns a JSON map
app.Get("/json", func(c fiber.Ctx) error {
return c.JSON(fiber.Map{
"success": true,
"message": "Hi John!",
})
// => {"success":true, "message":"Hi John!"}
})
log.Fatal(app.Listen(":3000"))
}
```
### WebSocket 升级
📖 [Websocket](https://github.com/gofiber/websocket)
```
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/websocket"
)
func main() {
app := fiber.New()
// WebSocket route
app.Get("/ws", websocket.New(func(c *websocket.Conn) {
defer c.Close()
for {
// Read message from client
mt, msg, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
break
}
log.Printf("recv: %s", msg)
// Write message back to client
err = c.WriteMessage(mt, msg)
if err != nil {
log.Println("write:", err)
break
}
}
}))
log.Fatal(app.Listen(":3000"))
// Connect via WebSocket at ws://localhost:3000/ws
}
```
### Server-Sent Events
📖 [More Info](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events)
```
package main
import (
"bufio"
"fmt"
"log"
"time"
"github.com/gofiber/fiber/v3"
"github.com/valyala/fasthttp"
)
func main() {
app := fiber.New()
// Server-Sent Events route
app.Get("/sse", func(c fiber.Ctx) error {
c.Set("Content-Type", "text/event-stream")
c.Set("Cache-Control", "no-cache")
c.Set("Connection", "keep-alive")
c.Set("Transfer-Encoding", "chunked")
c.Context().SetBodyStreamWriter(func(w *bufio.Writer) {
var i int
for {
i++
msg := fmt.Sprintf("%d - the time is %v", i, time.Now())
fmt.Fprintf(w, "data: Message: %s\n\n", msg)
fmt.Println(msg)
w.Flush()
time.Sleep(5 * time.Second)
}
})
return nil
})
log.Fatal(app.Listen(":3000"))
}
```
### Recover 中间件
📖 [Recover](https://docs.gofiber.io/api/middleware/recover)
```
package main
import (
"log"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/recover"
)
func main() {
app := fiber.New()
// Use Recover middleware to handle panics gracefully
app.Use(recover.New())
// Route that intentionally panics
app.Get("/", func(c fiber.Ctx) error {
panic("normally this would crash your app")
})
log.Fatal(app.Listen(":3000"))
}
```
### 使用可信代理
📖 [Config](https://docs.gofiber.io/api/fiber#config)
```
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func main() {
app := fiber.New(fiber.Config{
// Configure trusted proxies - WARNING: Only trust proxies you control
// Using TrustProxy: true with unrestricted IPs can lead to IP spoofing
TrustProxy: true,
TrustProxyConfig: fiber.TrustProxyConfig{
Proxies: []string{"10.0.0.0/8", "172.16.0.0/12"}, // Example: Internal network ranges only
},
ProxyHeader: fiber.HeaderXForwardedFor,
})
// Define routes
app.Get("/", func(c fiber.Ctx) error {
return c.SendString("Trusted Proxy Configured!")
})
log.Fatal(app.Listen(":3000"))
}
```
## 🧬 内置中间件
以下是 Fiber 框架中包含的中间件列表。
| Middleware | Description |
|--------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [adaptor](https://github.com/gofiber/fiber/tree/main/middleware/adaptor) | 用于将 net/http handler 转换为 Fiber request handler 或反向转换的适配器。 |
| [basicauth](https://github.com/gofiber/fiber/tree/main/middleware/basicauth) | 提供 HTTP 基本认证。对于有效的凭据,它调用下一个 handler;对于缺失或无效的凭据,返回 401 Unauthorized。 |
| [cache](https://github.com/gofiber/fiber/tree/main/middleware/cache) | 拦截并缓存 HTTP 响应。 |
| [compress](https://github.com/gofiber/fiber/tree/main/middleware/compress) | Fiber 的压缩中间件,支持 `deflate`、`gzip`、`brotli` 和 `zstd`。 |
| [cors](https://github.com/gofiber/fiber/tree/main/middleware/cors) | 通过各种选项启用跨域资源共享 (CORS)。 |
| [csrf](https://github.com/gofiber/fiber/tree/main/middleware/csrf) | 防止 CSRF 攻击。 |
| [earlydata](https://github.com/gofiber/fiber/tree/main/middleware/earlydata) | 添加对 TLS 1.3 早期数据("0-RTT")功能的支持。 |
| [encryptcookie](https://github.com/gofiber/fiber/tree/main/middleware/encryptcookie) | 加密 cookie 值的加密中间件。 |
| [envvar](https://github.com/gofiber/fiber/tree/main/middleware/envvar) | 通过提供可选配置来暴露环境变量。 |
| [etag](https://github.com/gofiber/fiber/tree/main/middleware/etag) | 允许缓存更高效并节省带宽,因为如果内容未更改,Web 服务器无需重新发送完整响应。 |
| [expvar](https://github.com/gofiber/fiber/tree/main/middleware/expvar) | 通过其 HTTP 服务器以 JSON 格式提供运行时暴露的变量。 |
| [favicon](https://github.com/gofiber/fiber/tree/main/middleware/favicon) | 忽略日志中的 favicon,或者如果提供了文件路径则从内存中提供。 |
| [healthcheck](https://github.com/gofiber/fiber/tree/main/middleware/healthcheck) | Fiber 的存活和就绪探针。 |
| [helmet](https://github.com/gofiber/fiber/tree/main/middleware/helmet) | 通过设置各种 HTTP 头来帮助保护您的应用程序。 |
| [idempotency](https://github.com/gofiber/fiber/tree/main/middleware/idempotency) | 允许构建容错 API,确保重复的请求不会错误地导致在服务器端多次执行相同的操作。 |
| [keyauth](https://github.com/gofiber/fiber/tree/main/middleware/keyauth) | 添加对基于密钥的认证的支持。 |
| [limiter](https://github.com/gofiber/fiber/tree/main/middleware/limiter) | 向 Fiber 添加 Rate-limiting 支持。用于限制对公共 API 和/或端点(如密码重置)的重复请求。 |
| [logger](https://github.com/gofiber/fiber/tree/main/middleware/logger) | HTTP 请求/响应日志记录器。 |
| [pprof](https://github.com/gofiber/fiber/tree/main/middleware/pprof) | 以 pprof 格式提供运行时分析数据。 |
| [proxy](https://github.com/gofiber/fiber/tree/main/middleware/proxy) | 允许您将请求代理到多个服务器。 |
| [recover](https://github.com/gofiber/fiber/tree/main/middleware/recover) | 从堆栈链中的任何 panic 中恢复,并将控制权交给集中的 ErrorHandler。 |
| [redirect](https://github.com/gofiber/fiber/tree/main/middleware/redirect) | 重定向中间件。 |
| [requestid](https://github.com/gofiber/fiber/tree/main/middleware/requestid) | 向每个请求添加一个请求 ID。 |
| [responsetime](https://github.com/gofiber/fiber/tree/main/middleware/responsetime) | 测量请求处理持续时间并将其写入可配置的响应头。 |
| [rewrite](https://github.com/gofiber/fiber/tree/main/middleware/rewrite) | 根据提供的规则重写 URL 路径。这对于向后兼容性或仅创建更清晰、更具描述性的链接很有帮助。 |
| [session](https://github.com/gofiber/fiber/tree/main/middleware/session) | Session 中间件。注意:此中间件使用我们的 Storage 包。 |
| [skip](https://github.com/gofiber/fiber/tree/main/middleware/skip) | Skip 中间件,如果谓词为真,则跳过被包装的 handler。 |
| [static](https://github.com/gofiber/fiber/tree/main/middleware/static) | Fiber 的静态中间件,用于提供静态文件,如 **images**、**CSS** 和 **JavaScript**。 |
| [timeout](https://github.com/gofiber/fiber/tree/main/middleware/timeout) | 为请求添加最长时间,如果超过该时间则转发给 ErrorHandler。 |
## 🧬 外部中间件
由 [Fiber 团队](https://github.com/orgs/gofiber/people) 维护的外部托管中间件模块列表。
| Middleware | Description |
| :------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------- |
| [contrib](https://github.com/gofiber/contrib) | 第三方中间件 |
| [storage](https://github.com/gofiber/storage) | 实现了 Storage 接口的预制存储驱动程序,旨在与各种 Fiber 中间件一起使用。 |
| [template](https://github.com/gofiber/template) | 此包包含 9 个可与 Fiber 一起使用的模板引擎。 |
## 🕶️ 精选列表
有关更多文章、中间件、示例或工具,请查看我们的 [awesome list](https://github.com/gofiber/awesome-fiber)。
## 💻 开发
为了确保您的贡献准备好提交 Pull Request,请使用以下 `Makefile` 命令。这些工具有助于保持代码质量和一致性。
- **make help**: 显示可用命令。
- **make audit**: 进行质量检查。
- **make benchmark**: 对代码性能进行基准测试。
- **make coverage**: 生成测试覆盖率报告。
- **make format**: 自动格式化代码。
- **make lint**: 运行 lint 检查。
- **make test**: 执行所有测试。
-make tidy**: 整理依赖项。
运行这些命令以确保您的代码符合项目标准和最佳实践。
## ⭐️ Stargazers
## 🧾 许可证
版权所有 (c) 2019-present [Fenny](https://github.com/fenny) 和 [贡献者](https://github.com/gofiber/fiber/graphs/contributors)。`Fiber` 是根据 [MIT 许可证](https://github.com/gofiber/fiber/blob/main/LICENSE) 授权的自由开源软件。官方 Logo 由 [Vic Shóstak](https://github.com/koddr) 创作,并根据 [Creative Commons](https://creativecommons.org/licenses/by-sa/4.0/) 许可证 (CC BY-SA 4.0 International) 分发。