👋 欢迎
一个带有示例的在线 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,
})
你好,世界!
下面嵌入的是你可以创建的最简单的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 请求方法(GET
、PUT
、POST
等)。
每个路由都可以具有多个处理程序函数,这些函数在路由匹配时执行。
路由定义采用以下结构
// Function signature
app.Method(path string, ...func(*fiber.Ctx) error)
app
是Fiber 的一个实例Method
是 HTTP 请求方法:GET
、PUT
、POST
等。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
})
静态文件
要提供静态文件(如图像、CSS 和 JavaScript 文件),请将函数处理程序替换为文件或目录字符串。
函数签名
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。