Fiber是一个受到Express启发的Web框架,建立在Go语言写的最快的FasthttpHTTP引擎的基础上。旨在简化 零内存分配和提高性能,以便快速开发。
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"))
}
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
默认使用html/template。
如果您要执行部分模版或使用其他引擎,例如amber,handlebars,mustache或者pug等等...
请查看我们的Template包,该包支持多个模版引擎。
package main
import (
"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 route
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
// ...
}
📖 Logger
package main
import (
"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
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
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 anything
app.Use(func(c *fiber.Ctx) error {
return c.SendStatus(404)
// => 404 "Not Found"
})
log.Fatal(app.Listen(":3000"))
}
📖 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"))
}
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
}
📖 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 | 基本身份验证中间件提供HTTP基本身份验证。 它为有效凭证调用下一个处理程序,为丢失或无效凭证调用401 Unauthorized. |
compress | Fiber的压缩中间件,默认支持' deflate ', ' gzip '和' brotli '. |
cache | 拦截和缓存响应. |
cors | 使用各种选项启用跨源资源共享(CORS). |
csrf | 保护来自CSRF的漏洞. |
filesystem | 光纤文件系统中间件,特别感谢 Alireza Salary. |
favicon | 如果提供了文件路径,则忽略日志中的图标或从内存中服务. |
limiter | 用于光纤的限速中间件。 用于限制对公共api和/或端点的重复请求,如密码重置. |
logger | HTTP请求/响应日志. |
pprof | 特别感谢 Matthew Lee (@mthli) |
proxy | 允许您将请求proxy到多个服务器 |
requestid | 为每个请求添加一个requesttid. |
recover | 恢复中间件从堆栈链中的任何位置的恐慌中恢复,并将控制处理到集中式. 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
,可以 ☕ 在这里买一杯咖啡
User | Donation | |
---|---|---|
@destari | ☕ x 10 | |
@dembygenesis | ☕ x 5 | |
@thomasvvugt | ☕ x 5 | |
@hendratommy | ☕ x 5 | |
@ekaputra07 | ☕ x 5 | |
@jorgefuertes | ☕ x 5 | |
@candidosales | ☕ x 5 | |
@l0nax | ☕ x 3 | |
@ankush | ☕ x 3 | |
@bihe | ☕ x 3 | |
@justdave | ☕ x 3 | |
@koddr | ☕ x 1 | |
@lapolinar | ☕ x 1 | |
@diegowifi | ☕ x 1 | |
@ssimk0 | ☕ x 1 | |
@raymayemir | ☕ x 1 | |
@melkorm | ☕ x 1 | |
@marvinjwendt | ☕ x 1 | |
@toishy | ☕ x 1 |
Copyright (c) 2019-present Fenny and Contributors. Fiber
is free and open-source software licensed under the MIT License. Official logo was created by Vic Shóstak and distributed under Creative Commons license (CC BY-SA 4.0 International).
Third-party library licenses