Fiber 项目介绍
Fiber是一个受到Express启发的Web框架,基于使用Go语言编写的最快的HTTP引擎Fasthttp构建。旨在通过零内存分配和高性能服务,使快速开发更加简便。
⚡️ 快速入门
package main
import "github.com/gofiber/fiber/v2"
func main() {
app := fiber.New()
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World 👋!")
})
app.Listen(":3000")
}
🤖 基准测试
这些测试由TechEmpower和Go Web 完成。如果您想查看所有结果,请访问我们的Wiki 。


⚙️ 安装
确保已安装 (下载) 1.14 或更高版本的 Go。
通过创建文件夹并在文件夹内运行 go mod init github.com/your/repo (了解更多) 来初始化项目,然后使用 go get 命令安装 Fiber:
go get -u github.com/gofiber/fiber/v2
🎯 特点
💡 哲学
从Node.js切换到Go的新gopher在开始构建Web应用程序或微服务之前需要经历学习过程。 Fiber作为一个Web 框架 ,是按照极简主义的思想并遵循UNIX 方式创建的,因此新的gopher可以在热烈和可信赖的欢迎中迅速进入Go的世界。
Fiber受到了互联网上最流行的Web框架Express的启发 。我们结合了Express的易用性和Go的原始性能 。如果您曾经在Node.js上实现过Web应用程序(使用 Express 或类似工具),那么许多方法和原理对您来说应该非常易懂。
我们关注 整个互联网 用户在issues和 Discord channel的消息,为了创建一个迅速,灵活以及友好的Go web框架,满足任何任务,最后期限和开发者技能。就像Express在JavaScript世界中一样。
限制
- 由于 Fiber 使用了 unsafe 特性,导致其可能与最新的 Go 版本不兼容。Fiber 2.18.0 已经在 Go 1.14 到 1.17 上验证过。
- Fiber 与 net/http 接口不兼容。这意味着你无法使用 gqlen,go-swagger 或者任何其他属于 net/http 生态的项目。
👀 示例
下面列出了一些常见示例。如果您想查看更多代码示例,请访问我们的Recipes代码库或API 文档 。
📖 基础路由
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"))
}
📖 静态文件服务
func main() {
app := fiber.New()
app.Static("/", "./public")
// => http://localhost:3000/js/script.js
// => http://localhost:3000/css/style.css
app.Static("/prefix", "./public")
// => http://localhost:3000/prefix/js/script.js
// => http://localhost:3000/prefix/css/style.css
app.Static("*", "./public/index.html")
// => http://localhost:3000/any/path/shows/index/html
log.Fatal(app.Listen(":3000"))
}
📖 中间件和Next
func main() {
app := fiber.New()
// Match any route
app.Use(func(c *fiber.Ctx) error {
fmt.Println("🥇 First handler")
return c.Next()
})
// Match all routes starting with /api
app.Use("/api", func(c *fiber.Ctx) error {
fmt.Println("🥈 Second handler")
return c.Next()
})
// GET /api/register
app.Get("/api/list", func(c *fiber.Ctx) error {
fmt.Println("🥉 Last handler")
return c.SendString("Hello, World 👋!")
})
log.Fatal(app.Listen(":3000"))
}
📚 展示更多代码示例
🧬 内部中间件
以下为包含在Fiber框架中的中间件列表。
| 中间件 | 描述 |
|---|---|
| basicauth | 基本身份验证中间件提供 HTTP 基本身份验证。 它为有效凭证用户调起下一步的处理程序,为丢失或无效凭证响应 401 Unauthorized。 |
| compress | Fiber的压缩中间件,默认支持’ deflate ‘,’ gzip ‘和’ brotli ‘。 |
| cache | 拦截和缓存响应 |
| cors | 使用各种选项启用跨源资源共享(CORS)。 |
| csrf | 保护系统不受 CSRF 漏洞攻击。 |
| filesystem | Fiber 文件系统中间件,特别感谢 Alireza Salary。 |
| favicon | 如果提供了文件路径,则忽略日志中的图标或从内存中服务。 |
| limiter | 用于 Fiber 的限速中间件。 用于限制对公共api和/或端点的重复请求,如密码重置。 |
| logger | HTTP请求/响应日志。 |
| pprof | 特别感谢 Matthew Lee (@mthli) |
| proxy | 允许您将请求代理到多个服务器 |
| requestid | 为每个请求添加一个requestid。 |
| recover | 恢复中间件从堆栈链中的任何位置的 Panic 中恢复,并将集中处理。 ErrorHandler。 |
| timeout | 添加请求的最大时间,如果超过了,则触发 ErrorHandler。 |
🧬 外部中间件
以下为外部托管的中间件列表,由Fiber团队维护。
| 中间件 | 描述 |
|---|---|
| adaptor | net/http处理程序与Fiber请求处理程序之间的转换器,特别感谢 @arsmn! |
| helmet | 通过设置各种HTTP头帮助保护您的应用程序。 |
| jwt | JWT返回一个JSON Web Token(JWT)身份验证中间件。 |
| keyauth | Key auth中间件提供基于密钥的身份验证。 |
| rewrite | Rewrite中间件根据提供的规则重写URL路径。它有助于向后兼容或者创建更清晰、更具描述性的链接。 |
| session | 这个session中间件建立在@savsgio MIT 的fasthttp/session之上。特别感谢@thomasvvugt为这个中间件提供帮助! |
| template | 该软件包包含8个模板引擎,可与Fiber v1.10.x Go 1.13或更高版本一起使用。 |
| websocket | 基于 Fasthttp WebSocket for Fiber与Locals支持! |
🌱 第三方中间件
这是由Fiber社区创建的中间件列表,如果您想看到自己的中间件,请创建PR。
- arsmn/fiber-casbin
- arsmn/fiber-introspect
- arsmn/fiber-swagger
- arsmn/gqlgen
- codemicro/fiber-cache
- sujit-baniya/fiber-boilerplate
- juandiii/go-jwk-security
- kiyonlin/fiber_limiter
- shareed2k/fiber_limiter
- shareed2k/fiber_tracing
- thomasvvugt/fiber-boilerplate
- ansrivas/fiberprometheus
- LdDl/fiber-long-poll
- K0enM/fiber_vhost
- theArtechnology/fiber-inertia
- aschenmaker/fiber-health-check
- elastic/apmfiber
👍 贡献
如果您要说声谢谢或支持Fiber的积极发展:
☕ 支持者
Fiber是一个开源项目,依靠捐赠来支付账单,例如我们的域名,gitbook,netlify和无服务器托管。如果要支持Fiber,可以 ☕ 在这里买一杯咖啡
Go Fiber 中文文档
关于 LearnKu
推荐文章: