Fiber
开局先丢个性能比较图
Fiber框架快速入门
先注册Rest方法和路由URL以及对应的处理器,处理器需要满足func(*Ctx) error
func (app *App) Get(path string, handlers …Handler) Router
1 |
|
使用APP.Listen方法启动服务器,指定监听端口号.监听成功则会阻塞主协程
1 | log.Printf("listening on %s", "127.0.0.1:8080") |
Fiber框架请求处理
handler函数的入参context 封装了请求参数,包括请求行、请求头、请求体等信息。
通过context.Request().Body获取请求体,是一个byte切片(不是流),可以反复读取。
通过context.Response().BodyWriter设置响应体,可以写入byte切片或字符串。
可以设置响应头和状态码,设置顺序不限。
使用context.SendStatus()设置状态码,建议用于仅设置状态码的场景。
📋 立即响应方法对比表
| 方法 | 描述 | 示例代码 |
|---|---|---|
SendStatus() |
设置 HTTP 状态码并立即发送响应,响应体为空时会自动填充状态消息。 | return c.SendStatus(fiber.StatusNotFound) |
SendString() |
设置响应体为字符串并发送。 | return c.SendString("Hello, World!") |
Send() |
设置响应体为字节切片并发送。 | return c.Send([]byte("Hello, World!")) |
SendStream() |
设置响应体为流并发送。 | return c.SendStream(bytes.NewReader([]byte("Hello, World!"))) |
📋 延时响应方法对比表
| 方法 | 描述 | 示例代码 |
|---|---|---|
Status() |
设置响应的状态码,通常与其他方法链式调用。 | return c.Status(fiber.StatusOK).SendString("Success") |
Set() |
设置响应头部信息。 | c.Set("X-Custom-Header", "Value") |
Append() |
向响应头部添加值。 | c.Append("Set-Cookie", "session=abc123") |
Attachment() |
设置响应的 Content-Disposition 为附件。 | c.Attachment("file.txt") |
JSON() |
设置响应体为 JSON 格式并发送。 | return c.JSON(fiber.Map{"status": "ok"}) |
SendFile() |
发送文件作为响应体。 | return c.SendFile("/path/to/file.txt") |
SendStreamWriter() |
设置响应体为流写入器并发送。 | return c.SendStreamWriter(func(w *bufio.Writer) { fmt.Fprintf(w, "Hello, World!") }) |
建议使用场景
- 仅返回状态码,无正文:使用 SendStatus()。
- 返回简单文本响应:使用 SendString()。
- 返回二进制数据或自定义格式响应:使用 Send()。
- 大文件传输或实时数据流:使用 SendStream()。
- 设置响应状态码并发送响应:使用
Status()。 - 设置响应头部信息:使用
Set()。 - 向响应头部添加值:使用
Append()。 - 设置响应为附件:使用
Attachment()。 - 返回 JSON 格式响应:使用
JSON()。 - 发送文件作为响应体:使用
SendFile()。 - 大文件传输或实时数据流:使用
SendStreamWriter()。:contentReference[oaicite:62]{index=62}
Fiber框架中间件安装
Fiber框架不自带中间件,需要显式安装。
安装日志和恢复中间件,使用use方法。
日志中间件指定输出格式、时区和输出位置。
恢复中间件用于捕获运行时异常,防止程序崩溃。
1 |
|
Fiber 的中间件和处理函数的执行顺序如下(Like Java-Netty ChannelPipeLine):
请求首先经过所有注册的中间件。
- 每个中间件可以选择是否调用 next(),将控制权传递给下一个中间件或路由处理函数。
- 如果所有中间件都调用了 next(),请求将到达路由处理函数,生成响应。
- 响应返回时,所有中间件将按相反的顺序执行,进行后处理。
- 这种机制使得可以在请求处理过程中插入日志记录、错误恢复、身份验证等功能,实现高度的灵活性和可维护性。
自定义中间件
1 | func customMiddleware(c *fiber.Ctx) error { |