👋 欢迎
包含示例的在线 API 文档,让您可以立即开始使用 Fiber 构建 Web 应用!
Fiber 是一个受 Express 启发的 Web 框架,构建于 Fasthttp 之上,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 返回的值默认情况下不是不可变的,并且会在请求之间被重用。根据经验法则,您必须只在 handler 内部使用 context 值,并且不得保留任何引用。一旦从 handler 返回,您从 context 中获取的任何值将在未来的请求中被重用,并在您不知情的情况下发生变化。这里有一个例子
func handler(c *fiber.Ctx) error {
// Variable is only valid within this handler
result := c.Params("foo")
// ...
}
如果您需要在 handler 外部持久化这些值,请使用 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
设置。这将使从 context 返回的所有值都变为不可变,允许您将它们持久化到任何地方。当然,这会牺牲一些性能。
app := fiber.New(fiber.Config{
Immutable: true,
})
Hello, World!
下面嵌入的是您可以创建的最直接的 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
浏览到 http://localhost:3000
,您应该会在页面上看到 Hello, World!
。
基本路由
路由是指确定应用程序如何响应客户端对特定端点的请求,该端点是 URI(或路径)和特定的 HTTP 请求方法(GET
, PUT
, POST
等)。
每个路由可以有多个 handler 函数,这些函数在路由匹配时执行。
路由定义采用以下结构
// Function signature
app.Method(path string, ...func(*fiber.Ctx) error)
app
是 Fiber 的一个实例Method
是一个 HTTP 请求方法:GET
,PUT
,POST
等。path
是服务器上的虚拟路径func(*fiber.Ctx) error
是一个包含 Context 的回调函数,在路由匹配时执行
简单路由
// Respond with "Hello, World!" on root path, "/"
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World!")
})
参数
// GET http://localhost: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 http://localhost: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 http://localhost: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 文件等静态文件,请将您的函数 handler 替换为文件或目录字符串。
函数签名
app.Static(prefix, root string, config ...Static)
使用以下代码来提供名为 ./public
的目录中的文件
app := fiber.New()
app.Static("/", "./public")
app.Listen(":3000")
现在,您可以加载 ./public
目录中的文件
http://localhost:3000/hello.html
http://localhost:3000/js/jquery.js
http://localhost:3000/css/style.css
注意
有关如何使用 Fiber 在 Go 中构建 API 的更多信息,请查看这篇优秀文章 关于使用 Fiber 在 Go 中构建 express-style API。