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

🤔 常见问题

我应该如何组织我的应用程序结构?

这个问题没有确切的答案。答案取决于你的应用程序规模和涉及的团队。为了尽可能灵活,Fiber 在结构方面不作任何假设。

路由和其他特定于应用程序的逻辑可以放在任意数量的文件中,采用你喜欢的任何目录结构。查看以下示例以获取灵感:

如何处理自定义的 404 响应?

如果你使用的是 v2.32.0 或更高版本,你只需要实现一个自定义错误处理器。请参阅下方内容,或在错误处理中查看更详细的说明。

如果你使用的是 v2.31.0 或更早版本,错误处理器将无法捕获 404 错误。相反,你需要在堆栈的最底部(在所有其他函数下方)添加一个中间件函数来处理 404 响应。

示例
app.Use(func(c *fiber.Ctx) error {
return c.Status(fiber.StatusNotFound).SendString("Sorry can't find that!")
})

如何使用热重载?

Air 是一个便捷的工具,它会在源代码更改时自动重启你的 Go 应用程序,使你的开发过程更快、更高效。

要在 Fiber 项目中使用 Air,请按照以下步骤操作:

  1. 从 GitHub 发布页面下载适合你操作系统的二进制文件,或直接从源代码构建工具来安装 Air。
  2. 在你的项目目录中创建一个 Air 的配置文件。该文件可以命名为 .air.toml 或 air.conf。这是一个适用于 Fiber 的示例配置文件:
# .air.toml
root = "."
tmp_dir = "tmp"
[build]
cmd = "go build -o ./tmp/main ."
bin = "./tmp/main"
delay = 1000 # ms
exclude_dir = ["assets", "tmp", "vendor"]
include_ext = ["go", "tpl", "tmpl", "html"]
exclude_regex = ["_test\\.go"]
  1. 在终端中运行以下命令,使用 Air 启动你的 Fiber 应用程序:
air

当你更改源代码时,Air 会检测到这些更改并自动重启应用程序。

Fiber Recipes 仓库中可以找到一个展示 Air 与 Fiber 集成的完整示例。该示例展示了如何在 Fiber 项目中配置和使用 Air,以创建高效的开发环境。

如何设置错误处理器?

要覆盖默认的错误处理器,可以在实例化新的 Fiber 实例时,提供 Config 来覆盖默认设置。

示例
app := fiber.New(fiber.Config{
ErrorHandler: func(c *fiber.Ctx, err error) error {
return c.Status(fiber.StatusInternalServerError).SendString(err.Error())
},
})

我们有一个专门的页面解释 Fiber 中的错误处理工作原理,请参阅错误处理

Fiber 支持哪些模板引擎?

Fiber 目前在我们的 gofiber/template 中间件中支持 9 种模板引擎:

要了解更多关于在 Fiber 中使用模板的信息,请参阅模板

Fiber 有社区聊天吗?

是的,我们有自己的 Discord 服务器,大家都在那里交流。我们为每个主题都设置了不同的聊天室。
如果你有问题或者只是想聊天,请通过这个 > 邀请链接 < 加入我们。

Fiber 支持子域名路由吗?

是的,我们支持。这里有一些示例:此示例适用于 v2。

package main

import (
"log"

"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/logger"
)

type Host struct {
Fiber *fiber.App
}

func main() {
// Hosts
hosts := map[string]*Host{}
//-----
// API
//-----
api := fiber.New()
api.Use(logger.New(logger.Config{
Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))
hosts["api.localhost:3000"] = &Host{api}
api.Get("/", func(c *fiber.Ctx) error {
return c.SendString("API")
})
//------
// Blog
//------
blog := fiber.New()
blog.Use(logger.New(logger.Config{
Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))
hosts["blog.localhost:3000"] = &Host{blog}
blog.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Blog")
})
//---------
// Website
//---------
site := fiber.New()
site.Use(logger.New(logger.Config{
Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))

hosts["localhost:3000"] = &Host{site}
site.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Website")
})
// Server
app := fiber.New()
app.Use(func(c *fiber.Ctx) error {
host := hosts[c.Hostname()]
if host == nil {
return c.SendStatus(fiber.StatusNotFound)
} else {
host.Fiber.Handler()(c.Context())
return nil
}
})
log.Fatal(app.Listen(":3000"))
}

如果需要更多信息,请参考此问题 #750