Fiber:高效、極速、極簡的Web框架
Go 語言構建的 Web 框架一大堆,Beego、Iris、Gin 等 。今天帶來一個足夠有吸引力的新的Web框架。
不同於其他的框架,他的性能極佳,代碼量又足夠小,上手和使用都能使你有駕輕就熟的感覺。
Fiber是一個基於Express的Web框架,建立在Go語言寫的最快的FasthttpHTTP引擎的基礎上。皆在簡化 零內存分配和提高性能,以便快速開發。
⚡️ 快速入門——上代碼!上代碼!
package main
import "github.com/gofiber/fiber"
func main() {
app := fiber.New() // 創建 fiber app引擎
app.Get("/", func(c *fiber.Ctx) { // 創建一個 get 方法的路由返回 Hello World!
c.Send("Hello, World!")
})
app.Listen(3000) // 開啓服務,並在 3000 端口監聽。
}
⚙️ 安裝——go get 香吧
首先, 下載並安裝Go。 1.11
或更高。
使用go get
命令完成安裝:
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
go get -u github.com/gofiber/fiber
🤖 性能——顯而易見的好
這些測試由TechEmpower和Go Web執行 。如果要查看所有結果,請訪問我們的Wiki 。
🎯 特點
- 強大的路由
- 靜態文件服務
- 極限表現
- 內存佔用低
- Express API端點
- 中間件和Next支持
- 快速的服務器端編程
- Template engines
- WebSocket support
- Rate Limiter
- Available in 12 languages
- 以及更多文檔
💡 哲學
從Node.js切換到Go的新gopher在開始構建Web應用程序或微服務之前正在應對學習過程。 Fiber作爲一個Web框架 ,是按照極簡主義的思想並遵循UNIX方式創建的,因此新的gopher可以以熱烈和可信賴的歡迎方式迅速進入Go的世界。
Fiber 受 Internet上最流行的Web框架Expressjs的啓發 。我們結合了Express的易用性和Go的原始性能 。如果您曾經在Node.js上實現過Web應用程序(使用Express.js或類似工具),那麼許多方法和原理對您來說似乎非常易懂。
👀 示例
下面列出了一些常見示例。如果您想查看更多代碼示例,請訪問我們的Recipes存儲庫或訪問我們的API文檔 。
路由
詳細文檔📖: Routing
func main() {
app := fiber.New()
// GET /john
app.Get("/:name", func(c *fiber.Ctx) {
fmt.Printf("Hello %s!", c.Params("name"))
// => Hello john!
})
// GET /john
app.Get("/:name/:age?", func(c *fiber.Ctx) {
fmt.Printf("Name: %s, Age: %s", c.Params("name"), c.Params("age"))
// => Name: john, Age:
})
// GET /api/register
app.Get("/api/*", func(c *fiber.Ctx) {
fmt.Printf("/api/%s", c.Params("*"))
// => /api/register
})
app.Listen(3000)
}
靜態文件
詳細文檔📖: Static
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
app.Listen(3000)
}
中間件和 Next 函數
詳細文檔📖: Middleware
詳細文檔📖: Next
func main() {
app := fiber.New()
// Match any route
app.Use(func(c *fiber.Ctx) {
fmt.Println("First middleware")
c.Next()
})
// Match all routes starting with /api
app.Use("/api", func(c *fiber.Ctx) {
fmt.Println("Second middleware")
c.Next()
})
// GET /api/register
app.Get("/api/list", func(c *fiber.Ctx) {
fmt.Println("Last middleware")
c.Send("Hello, World!")
})
app.Listen(3000)
}
模板引擎
詳細文檔📖: Settings
詳細文檔📖: Render
詳細文檔📖: Template
Fiber supports the default Go template engine
But if you want to use another template engine like amber, handlebars, mustache or pug.
You can use our Template Middleware.
import (
"github.com/gofiber/fiber"
"github.com/gofiber/template"
)
func main() {
// You can setup template engine before initiation app:
app := fiber.New(&fiber.Settings{
TemplateEngine: template.Mustache(),
TemplateFolder: "./views",
TemplateExtension: ".tmpl",
})
// OR after initiation app at any convenient location:
app.Settings.TemplateEngine = template.Mustache()
app.Settings.TemplateFolder = "./views"
app.Settings.TemplateExtension = ".tmpl"
// And now, you can call template `./views/home.tmpl` like this:
app.Get("/", func(c *fiber.Ctx) {
c.Render("home", fiber.Map{
"title": "Homepage",
"year": 1999,
})
})
// ...
}
鏈式路由組
📖 Group
func main() {
app := fiber.New()
// Root API route
api := app.Group("/api", cors()) // /api
// API v1 routes
v1 := api.Group("/v1", mysql()) // /api/v1
v1.Get("/list", handler) // /api/v1/list
v1.Get("/user", handler) // /api/v1/user
// API v2 routes
v2 := api.Group("/v2", mongodb()) // /api/v2
v2.Get("/list", handler) // /api/v2/list
v2.Get("/user", handler) // /api/v2/user
// ...
}
日誌中間件
📖 Logger
import (
"github.com/gofiber/fiber"
"github.com/gofiber/logger"
)
func main() {
app := fiber.New()
// Optional logger config
config := logger.Config{
Format: "${time} - ${method} ${path}\n",
TimeFormat: "Mon, 2 Jan 2006 15:04:05 MST",
}
// Logger with config
app.Use(logger.New(config))
app.Listen(3000)
}
Cross-Origin Resource Sharing (CORS)
📖 CORS
import (
"github.com/gofiber/fiber"
"github.com/gofiber/cors"
)
func main() {
app := fiber.New()
// CORS with default config
app.Use(cors.New())
app.Listen(3000)
}
Check CORS by passing any domain in Origin
header:
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) {
c.Send("This is a demo!")
})
app.Post("/register", func(c *fiber.Ctx) {
c.Send("Welcome!")
})
// Last middleware to match anything
app.Use(func(c *fiber.Ctx) {
c.SendStatus(404)
// => 404 "Not Found"
})
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) {
c.JSON(&User{"John", 20})
// => {"name":"John", "age":20}
})
app.Get("/json", func(c *fiber.Ctx) {
c.JSON(fiber.Map{
"success": true,
"message": "Hi John!",
})
// => {"success":true, "message":"Hi John!"}
})
app.Listen(3000)
}
WebSocket 升級
import (
"github.com/gofiber/fiber"
"github.com/gofiber/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
}
}
}))
app.Listen(3000)
// ws://localhost:3000/ws
}
重新配置中間件
📖 Recover
import (
"github.com/gofiber/fiber"
"github.com/gofiber/recover"
)
func main() {
app := fiber.New()
// Optional recover config
config := recover.Config{
Handler: func(c *fiber.Ctx, err error) {
c.SendString(err.Error())
c.SendStatus(500)
},
}
// Logger with custom config
app.Use(recover.New(config))
app.Listen(3000)
}
🧬 官方提供的中間件
For an more maintainable middleware ecosystem, we’ve put official middlewares into separate repositories:
- gofiber/compression
- gofiber/basicauth
- gofiber/requestid
- gofiber/websocket
- gofiber/keyauth
- gofiber/rewrite
- gofiber/recover
- gofiber/limiter
- gofiber/session
- gofiber/adaptor
- gofiber/logger
- gofiber/helmet
- gofiber/embed
- gofiber/pprof
- gofiber/cors
- gofiber/csrf
- gofiber/jwt
🌱第三方提供的中間件
This is a list of middlewares that are created by the Fiber community, please create a PR if you want to see yours!
- arsmn/fiber-swagger
- arsmn/fiber-casbin
- arsmn/fiber-introspect
- shareed2k/fiber_tracing
- shareed2k/fiber_limiter
- thomasvvugt/fiber-boilerplate
- arsmn/gqlgen
💬 媒體
- Welcome to Fiber — an Express.js styled web framework written in Go with ❤️ — 03 Feb 2020
- Fiber released v1.7! 🎉 What’s new and is it still fast, flexible and friendly? — 21 Feb 2020
- 🚀 Fiber v1.8. What’s new, updated and re-thinked? — 03 Mar 2020
- Is switching from Express to Fiber worth it? 🤔 — 01 Apr 2020
- Creating Fast APIs In Go Using Fiber — 07 Apr 2020
- Building a Basic REST API in Go using Fiber - 23 Apr 2020
- 📺 Building a REST API using GORM and Fiber - 25 Apr 2020
- 🌎 Create a travel list app with Go, Fiber, Angular, MongoDB and Google Cloud Secret Manager - 25 Apr 2020
- Fiber v1.9.6 🔥 How to improve performance by 817% and stay fast, flexible and friendly? - 12 May 2020
👍 貢獻
如果您要說聲謝謝或支持Fiber
的積極發展:
- 將GitHub Star添加到項目中。
- 在Twitter上發佈有關項目的推文。
- 在Medium,Dev.to或個人博客上寫評論或教程。
- Help us to translate our API Documentation via Crowdin
- Support the project by donating a cup of coffee.
💻 貢獻者Github頭像
⚠️ MIT書
Copyright © 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