1
0
mirror of https://github.com/gofiber/fiber.git synced 2025-02-23 15:03:46 +00:00
fiber/.github/README_zh-CN.md
2020-07-14 15:49:42 +08:00

35 KiB
Raw Blame History

Fiber

Fiber是一个受到Express启发的Web框架,建立在Go语言写的最快的FasthttpHTTP引擎的基础上。旨在简化 零内存分配提高性能,以便快速开发。

快速入门

package main

import "github.com/gofiber/fiber"

func main() {
  app := fiber.New()

  app.Get("/", func(c *fiber.Ctx) {
    c.Send("Hello, World 👋!")
  })

  app.Listen(3000)
}

🤖 性能

这些测试由TechEmpowerGo Web 执行。如果要查看所有结果,请访问我们的Wiki

⚙️ 安装

首先, 下载并安装Go。 需要1.11或更高版本。

使用go get命令完成安装:

export GO111MODULE=on
export GOPROXY=https://goproxy.cn

go get -u github.com/gofiber/fiber

🎯 特点

💡 哲学

Node.js切换到Go的新gopher在开始构建Web应用程序或微服务之前正在应对学习曲线。 Fiber作为一个Web框架 ,是按照极简主义的思想并遵循UNIX方式创建的,因此新的gopher可以在热烈和可信赖的欢迎中迅速进入Go的世界。

Fiber受到了互联网上最流行的Web框架Express启发 。我们结合了Express易用性Go原始性能 。如果您曾经在Node.js上实现过Web应用程序(使用Express或类似工具),那么许多方法和原理对您来说应该非常易懂

我们关注 整个互联网 用户在issues和Discord channel的消息,为了创建一个迅速灵活以及友好Go web框架,满足任何任务,最后期限和开发者技能。就像ExpressJavaScript世界中一样。

👀 示例

下面列出了一些常见示例。如果您想查看更多代码示例,请访问我们的Recipes代码库或API文档

📖 基础路由

func main() {
  app := fiber.New()

  // GET /john
  app.Get("/:name", func(c *fiber.Ctx) {
    msg := fmt.Sprintf("Hello, %s 👋!", c.Params("name"))
    c.Send(msg) // => Hello john 👋!
  })

  // GET /john/75
  app.Get("/:name/:age/:gender?", func(c *fiber.Ctx) {
    msg := fmt.Sprintf("👴 %s is %s years old", c.Params("name"), c.Params("age"))
    c.Send(msg) // => 👴 john is 75 years old
  })

  // GET /dictionary.txt
  app.Get("/:file.:ext", func(c *fiber.Ctx) {
    msg := fmt.Sprintf("📃 %s.%s", c.Params("file"), c.Params("ext"))
    c.Send(msg) // => 📃 dictionary.txt
  })

  // GET /flights/LAX-SFO
  app.Get("/flights/:from-:to", func(c *fiber.Ctx) {
    msg := fmt.Sprintf("💸 From: %s, To: %s", c.Params("from"), c.Params("to"))
    c.Send(msg) // => 💸 From: LAX, To: SFO
  })

  // GET /api/register
  app.Get("/api/*", func(c *fiber.Ctx) {
    msg := fmt.Sprintf("✋ %s", c.Params("*"))
    c.Send(msg) // => ✋ /api/register
  })

  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

  app.Listen(3000)
}

📖 中间件Next

func main() {
  app := fiber.New()

  // Match any route
  app.Use(func(c *fiber.Ctx) {
    fmt.Println("🥇 First handler")
    c.Next()
  })

  // Match all routes starting with /api
  app.Use("/api", func(c *fiber.Ctx) {
    fmt.Println("🥈 Second handler")
    c.Next()
  })

  // GET /api/register
  app.Get("/api/list", func(c *fiber.Ctx) {
    fmt.Println("🥉 Last handler")
    c.Send("Hello, World 👋!")
  })

  app.Listen(3000)
}
📚 展示更多代码示例

模版引擎

📖 配置 📖 模版引擎 📖 渲染

如果未设置模版引擎,则Fiber默认使用html/template

如果您要执行部分模版或使用其他引擎,例如amberhandlebarsmustache或者pug等等...

请查看我们的Template包,该包支持多个模版引擎。

import (
  "github.com/gofiber/fiber"
  "github.com/gofiber/template/pug"
)

func main() {
  // You can setup Views engine before initiation app:
  app := fiber.New(&fiber.Settings{
    Views: pug.New("./views", ".pug"),
  })

  // OR after initiation app at any convenient location:
  app.Settings.Views = pug.New("./views", ".pug"),

  // And now, you can call template `./views/home.pug` like this:
  app.Get("/", func(c *fiber.Ctx) {
    c.Render("home", fiber.Map{
      "title": "Homepage",
      "year":  1999,
    })
  })

  // ...
}

组合路由链

📖 路由分组

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/fiber/middleware"
)

func main() {
  app := fiber.New()

  // Default
  app.Use(middleware.Logger())

  // Custom logging format
  app.Use(middleware.Logger("${method} - ${path}"))

  // Custom Config
  app.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
    Next: func(ctx *fiber.Ctx) bool {
      return ctx.Path() != "/private"
    },
    Format: "${method} - ${path}",
    Output: io.Writer,
  }))

  app.Listen(3000)
}

跨域资源共享(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)
}

通过在请求头中设置Origin传递任何域来检查CORS

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
}

恢复(panic)中间件

📖 Recover

import (
    "github.com/gofiber/fiber"
    "github.com/gofiber/fiber/middleware"
)

func main() {
  app := fiber.New()

  app.Use(middleware.Recover())

  app.Get("/", func(c *fiber.Ctx) {
    panic("normally this would crash your app")
  })

  app.Listen(3000)
}

🧬 Fiber中间件

此处列出的Fiber中间件模块由Fiber团队维护。

中间件 描述 内置中间件
adaptor net/http处理程序与Fiber处理程序之间的适配器,特别感谢 @arsmn! -
basicauth 基本身份验证中间件提供HTTP基本身份验证。验证有效时它调用下一个处理程序否则返回401 Unauthorized响应。 -
compress Fiber的压缩中间件,默认情况下支持deflategzipbrotli middleware.Compress()
cors 使用各种选项启用跨域资源共享CORS -
csrf 保护免受CSRF攻击。 -
filesystem Fiber的FileSystem中间件特别感谢 Alireza Salary -
favicon 如果提供了favicon文件路径,则忽略日志中的图标或从内存中提供图标。 middleware.Favicon()
helmet 通过设置各种HTTP标头来保护您的应用程序。 -
jwt JWT是返回JSON Web令牌JWT的身份验证中间件。 -
keyauth 密钥身份验证中间件提供基于密钥的身份验证。 -
limiter Fiber的频率限制中间件。用于限制对公共API的重复请求例如密码重置。 -
logger HTTP 访问日志中间件。 middleware.Logger()
pprof 特别感谢 Matthew Lee @mthli -
recover 恢复中间件可从堆栈链中任何地方的panic中恢复,并将控制权交给集中式错误处理器. middleware.Recover()
rewrite Rewrite中间件根据提供的规则重写URL路径。它对于向后兼容或创建更简洁,更具描述性的链接很有帮助。 -
requestid Request ID中间件为请求生成唯一的ID。 middleware.RequestID()
session session中间件通过了 @savsgio MIT 许可,建立在fasthttp/session之上。特别感谢 @thomasvvugt 帮助完成此中间件。 -
template 该软件包包含8个模板引擎需要配合Fiberv1.10.x以及Go1.13或更高版本使用。 -
websocket Fiber基于Fasthttp WebSocket的中间件,支持Locals功能! -

🌱 第三方中间件

这是由Fiber社区创建的中间件列表,如果您想看到自己的中间件,请创建PR

💬 媒体

👍 贡献

如果您要说声谢谢或支持Fiber的积极发展:

  1. FiberGitHub Star点个星星。
  2. Twitter上发布有关项目的推文
  3. MediumDev.to或个人博客上写评论或教程。
  4. 帮助我们通过Crowdin Crowdin翻译我们的API文档
  5. 通过捐赠一杯咖啡来支持本项目。

支持者

Fibre是一个开源项目,依靠捐赠来支付账单,例如我们的域名,gitbooknetlify和无服务器托管。如果要支持Fiber,可以 在这里买一杯咖啡

User Donation
@destari x 10
@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

💻 Code Contributors

Code Contributors

Stargazers

Stargazers over time

⚠️ License

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