Fiber一個Go語言構建的高效、極速、極簡的Web框架

Fiber:高效、極速、極簡的Web框架

Go 語言構建的 Web 框架一大堆,Beego、Iris、Gin 等 。今天帶來一個足夠有吸引力的新的Web框架。

不同於其他的框架,他的性能極佳,代碼量又足夠小,上手和使用都能使你有駕輕就熟的感覺。

Fiber是一個基於ExpressWeb框架,建立在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

🤖 性能——顯而易見的好

這些測試由TechEmpowerGo Web執行 。如果要查看所有結果,請訪問我們的Wiki

在這裏插入圖片描述

🎯 特點

💡 哲學

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響應

📖 HTTP Methods

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 升級

📖 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:

🌱第三方提供的中間件

This is a list of middlewares that are created by the Fiber community, please create a PR if you want to see yours!

💬 媒體

👍 貢獻

如果您要說聲謝謝或支持Fiber的積極發展:

  1. GitHub Star添加到項目中。
  2. 在Twitter上發佈有關項目的推文
  3. MediumDev.to或個人博客上寫評論或教程。
  4. Help us to translate our API Documentation via Crowdin Crowdin
  5. Support the project by donating a cup of coffee.

‎‍💻 貢獻者Github頭像

Code Contributors

⚠️ 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章