
Fiber,一个受Express启发的Golang Web框架,建立在Fasthttp 的基础之上。旨在简化、零内存分配和高性能,以及快速开发。
⚡️ 快速入门
package mainimport "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世界中一样。
👀 示例
下面列出了一些常见示例。如果您想查看更多代码示例,请访问我们的Recipes代码库或API 文档 。
📖 基础路由
func main() {app := fiber.New()// GET /johnapp.Get("/:name", func(c *fiber.Ctx) error {msg := fmt.Sprintf("Hello, %s 👋!", c.Params("name"))return c.SendString(msg) // => Hello john 👋!})// GET /john/75app.Get("/:name/:age", 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 /dictionary.txtapp.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 /flights/LAX-SFOapp.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 /api/registerapp.Get("/api/*", func(c *fiber.Ctx) error {msg := fmt.Sprintf("✋ %s", c.Params("*"))return c.SendString(msg) // => ✋ register})log.Fatal(app.Listen(":3000"))}
📖 静态文件服务
func main() {app := fiber.New()app.Static("/", "./public")// => http://localhost:3000/js/script.js// => http://localhost:3000/css/style.cssapp.Static("/prefix", "./public")// => http://localhost:3000/prefix/js/script.js// => http://localhost:3000/prefix/css/style.cssapp.Static("*", "./public/index.html")// => http://localhost:3000/any/path/shows/index/htmllog.Fatal(app.Listen(":3000"))}
📖 中间件和Next
func main() {app := fiber.New()// Match any routeapp.Use(func(c *fiber.Ctx) error {fmt.Println("🥇 First handler")return c.Next()})// Match all routes starting with /apiapp.Use("/api", func(c *fiber.Ctx) error {fmt.Println("🥈 Second handler")return c.Next()})// GET /api/registerapp.Get("/api/list", func(c *fiber.Ctx) error {fmt.Println("🥉 Last handler")return c.SendString("Hello, World 👋!")})log.Fatal(app.Listen(":3000"))}
📚 展示更多代码示例
模版引擎
如果未设置模版引擎,则Fiber默认使用html/template。
如果您要执行部分模版或使用其他引擎,例如amber,handlebars,mustache或者pug等等…
请查看我们的Template包,该包支持多个模版引擎。
package mainimport ("github.com/gofiber/fiber/v2""github.com/gofiber/template/pug")func main() {// You can setup Views engine before initiation app:app := fiber.New(fiber.Config{Views: pug.New("./views", ".pug"),})// And now, you can call template `./views/home.pug` like this:app.Get("/", func(c *fiber.Ctx) error {return c.Render("home", fiber.Map{"title": "Homepage","year": 1999,})})log.Fatal(app.Listen(":3000"))}
组合路由链
📖 路由分组
func middleware(c *fiber.Ctx) error {fmt.Println("Don't mind me!")return c.Next()}func handler(c *fiber.Ctx) error {return c.SendString(c.Path())}func main() {app := fiber.New()// Root API routeapi := app.Group("/api", middleware) // /api// API v1 routesv1 := api.Group("/v1", middleware) // /api/v1v1.Get("/list", handler) // /api/v1/listv1.Get("/user", handler) // /api/v1/user// API v2 routesv2 := api.Group("/v2", middleware) // /api/v2v2.Get("/list", handler) // /api/v2/listv2.Get("/user", handler) // /api/v2/user// ...}
日志中间件
📖 Logger
package mainimport ("log""github.com/gofiber/fiber/v2""github.com/gofiber/fiber/v2/middleware/logger")func main() {app := fiber.New()app.Use(logger.New())// ...log.Fatal(app.Listen(":3000"))}
跨域资源共享(CORS)中间件
📖 CORS
import ("log""github.com/gofiber/fiber/v2""github.com/gofiber/fiber/v2/middleware/cors")func main() {app := fiber.New()app.Use(cors.New())// ...log.Fatal(app.Listen(":3000"))}
通过在请求头中设置Origin传递任何域来检查 CORS:
curl -H "Origin: http://example.com" --verbose http://localhost:3000
自定义 404 响应
func main() {app := fiber.New()app.Static("/", "./public")app.Get("/demo", func(c *fiber.Ctx) error {return c.SendString("This is a demo!")})app.Post("/register", func(c *fiber.Ctx) error {return c.SendString("Welcome!")})// Last middleware to match anythingapp.Use(func(c *fiber.Ctx) error {return c.SendStatus(404)// => 404 "Not Found"})log.Fatal(app.Listen(":3000"))}
JSON 响应
📖 JSON
type User struct {Name string `json:"name"`Age int `json:"age"`}func main() {app := fiber.New()app.Get("/user", func(c *fiber.Ctx) error {return c.JSON(&User{"John", 20})// => {"name":"John", "age":20}})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
import ("github.com/gofiber/fiber/v2""github.com/gofiber/fiber/v2/middleware/websocket")func main() {app := fiber.New()app.Get("/ws", websocket.New(func(c *websocket.Conn) {for {mt, msg, err := c.ReadMessage()if err != nil {log.Println("read:", err)break}log.Printf("recv: %s", msg)err = c.WriteMessage(mt, msg)if err != nil {log.Println("write:", err)break}}}))log.Fatal(app.Listen(":3000"))// ws://localhost:3000/ws}
恢复(panic)中间件
📖 Recover
import ("github.com/gofiber/fiber/v2""github.com/gofiber/fiber/v2/middleware/recover")func main() {app := fiber.New()app.Use(recover.New())app.Get("/", func(c *fiber.Ctx) error {panic("normally this would crash your app")})log.Fatal(app.Listen(":3000"))}
🧬 内置中间件
以下为fiber框架的内置中间件:
| 中间件 | 描述 |
|---|---|
| basicauth | basicauth中间件提供HTTP基本身份验证 |
| compress | Fiber的压缩中间件,它支持deflate,gzip 和 brotli(默认) |
| cache | 拦截和响应缓存 |
| cors | 跨域处理 |
| csrf | CSRF攻击防护 |
| filesystem | Fiber的文件系统中间件 |
| favicon | favicon图标 |
| limiter | 请求频率限制中间件,用于控制API请求频率 |
| logger | HTTP请求与响应日志记录器 |
| pprof | pprof 中间件 |
| proxy | 请求代理 |
| requestid | 为每个请求添加一个requestid。 |
| recover | Recover中间件将程序从panic状态中恢复过来 |
| timeout | 添加请求的最大时间,如果超时,则转发给ErrorHandler。 |
🧬 外部中间件
有fiber团队维护的外部中间件
| 中间件 | 描述 |
|---|---|
| adaptor | net/http 与 Fiber请求的相互转换适配器 |
| helmet | 可设置各种HTTP Header来保护您的应用 |
| jwt | JSON Web Token (JWT) 中间件 |
| keyauth | 提供基于密钥的身份验证 |
| rewrite | URL路径重写 |
| session | Session中间件 |
| template | 模板引擎 |
| websocket | Fasthttp WebSocket 中间件 |
🌱 第三方中间件
这是由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
