跳至主要内容
版本:v2.x

👋 欢迎

一个带有示例的在线 API 文档,以便你可以立即开始使用 Fiber 构建 Web 应用!

Fiber 是一个 Express 启发的Web 框架,建立在 Fasthttp 之上,这是 Go最快的 HTTP 引擎。旨在简化快速开发,同时兼顾零内存分配性能

这些文档适用于Fiber v2,该版本于2020 年 9 月 15 日发布。

安装

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

安装使用 go get 命令完成

go get github.com/gofiber/fiber/v2

零分配

从 *fiber.Ctx 返回的某些值默认情况下不是不可变的。

由于 fiber 针对高性能进行了优化,因此从 fiber.Ctx 返回的值默认不是不可变的,并且将在请求之间重复使用。根据经验,你必须仅在处理程序中使用上下文值,并且不得保留任何引用。一旦你从处理程序返回,从上下文中获取的任何值都将在将来的请求中重复使用,并且会在你的脚下发生变化。这是一个例子

func handler(c *fiber.Ctx) error {
// Variable is only valid within this handler
result := c.Params("foo")

// ...
}

如果你需要在处理程序之外保留此类值,请使用 copy 内置函数复制其底层缓冲区。这是一个用于保留字符串的示例

func handler(c *fiber.Ctx) error {
// Variable is only valid within this handler
result := c.Params("foo")

// Make a copy
buffer := make([]byte, len(result))
copy(buffer, result)
resultCopy := string(buffer)
// Variable is now valid forever

// ...
}

我们创建了一个自定义的 CopyString 函数来执行上述操作,该函数可在 gofiber/utils 中找到。

app.Get("/:foo", func(c *fiber.Ctx) error {
// Variable is now immutable
result := utils.CopyString(c.Params("foo"))

// ...
})

或者,你还可以使用 Immutable 设置。它将使从上下文中返回的所有值都不可变,从而允许你在任何地方保留它们。当然,这是以牺牲性能为代价的。

app := fiber.New(fiber.Config{
Immutable: true,
})

有关更多信息,请查看 #426#185

你好,世界!

下面嵌入的是你可以创建的最简单的Fiber应用程序

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")
}
go run server.go

浏览到 https://127.0.0.1:3000,你应该在页面上看到 你好,世界!

基本路由

路由是指确定应用程序如何响应客户端对特定端点的请求,该端点是一个 URI(或路径)和一个特定的 HTTP 请求方法(GETPUTPOST 等)。

每个路由都可以具有多个处理程序函数,这些函数在路由匹配时执行。

路由定义采用以下结构

// Function signature
app.Method(path string, ...func(*fiber.Ctx) error)
  • appFiber 的一个实例
  • MethodHTTP 请求方法GETPUTPOST 等。
  • path 是服务器上的虚拟路径
  • func(*fiber.Ctx) error 是一个回调函数,其中包含在路由匹配时执行的 上下文

简单路由

// Respond with "Hello, World!" on root path, "/"
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World!")
})

参数

// GET https://127.0.0.1:8080/hello%20world

app.Get("/:value", func(c *fiber.Ctx) error {
return c.SendString("value: " + c.Params("value"))
// => Get request with value: hello world
})

可选参数

// GET https://127.0.0.1:3000/john

app.Get("/:name?", func(c *fiber.Ctx) error {
if c.Params("name") != "" {
return c.SendString("Hello " + c.Params("name"))
// => Hello john
}
return c.SendString("Where is john?")
})

通配符

// GET https://127.0.0.1:3000/api/user/john

app.Get("/api/*", func(c *fiber.Ctx) error {
return c.SendString("API path: " + c.Params("*"))
// => API path: user/john
})

静态文件

要提供静态文件(如图像CSSJavaScript 文件),请将函数处理程序替换为文件或目录字符串。

函数签名

app.Static(prefix, root string, config ...Static)

使用以下代码在名为 ./public 的目录中提供文件

app := fiber.New()

app.Static("/", "./public")

app.Listen(":3000")

现在,您可以加载 ./public 目录中的文件

https://127.0.0.1:3000/hello.html
https://127.0.0.1:3000/js/jquery.js
https://127.0.0.1:3000/css/style.css

注意

有关如何使用 Fiber 在 Go 中构建 API 的更多信息,请查看这篇优秀的文章 使用 Fiber 在 Go 中构建 express 风格的 API