fiber中的fiber模块
qingheluo2023-10-12清河洛536
创建fiber实例New()方法用于创建Fiber实例func New(config ...Config) *App
在创建新Fiber实例时,可以传递一个Config结构体用于配置创建的实例
app := fiber.New(fiber.Config{
Prefork: true,
ServerHeader: "Fiber",
AppName: "Test App v1.0.1"
})创建Config结构体时的可选配置项
属性
描述
类型(默认值)
AppName(应用名)
这允许为应用设置应用名...
创建fiber实例
New()方法用于创建Fiber实例
func New(config ...Config) *App
在创建新Fiber实例时,可以传递一个Config结构体用于配置创建的实例
app := fiber.New(fiber.Config{
Prefork: true,
ServerHeader: "Fiber",
AppName: "Test App v1.0.1"
})
创建Config结构体时的可选配置项
属性 | 描述 | 类型(默认值) |
---|---|---|
AppName (应用名) |
这允许为应用设置应用名称 | string("") |
Prefork (预处理) |
允许使用SO_REUSEPORT套接字选项。 这将产生多个Go进程,监听同一端口。 如果启用,应用程序将需要通过shell运行,因为预工作模式设置环境变量。 |
bool(false) |
RequestMethod | 允许接受的HTTP请求方法 | []string(DefaultMethods) |
ServerHeader (服务器头) |
设定返回标头中的Server标头值。 | string("") |
StrictRouting (严格路由) |
启用时,路由器将/foo和/foo/视为不同 | bool(false) |
CaseSensitive (区分大小写) |
启用时,/Foo和/foo是不同的路由 | bool(false) |
Immutable (不可变) |
启用时,上下文方法返回的所有值都是不可变的。 默认情况下,它们在您从处理程序返回之前是有效的 |
bool(false) |
UnescapePath (未解除路径) |
在设置上下文路径之前将路由中的所有编码字符转换回,以便路由也可以使用URL编码的特殊字符 | bool(false) |
ETag (E标签) |
启用或禁用强ETag头生成,弱ETag和强ETag都是使用相同的哈希方法(CRC-32)生成的 | bool(false) |
BodyLimit (Body限制) |
设置请求正文允许的最大大小,如果大小超过配置的限制,则发送413-RequestEntityTooLarge响应 | int(4* 1024* 1024) |
Concurrency (并发) |
最大并发连接数 | int(256*1024) |
Views (视图) |
指定渲染功能的模板引擎 | Views(nil) |
ViewsLayout (视图布局) |
定义所有模板的全局布局 | string("") |
PassLocalsToViews (传递局部变量) |
是否将ctx.Locals(key, value)设置的局部变量传递到模板引擎 | bool(false) |
ReadTimeout (读取时间) |
允许读取完整请求(包括正文)的时间量。默认无限制 | time.Duration(nil) |
WriteTimeout (写入时间) |
响应超时写入之前的最大持续时间。默认无限制 | time.Duration(nil) |
IdleTimeout (闲置时间) |
启用保持活动状态时等待下一个请求的最长时间。如果IdleTimeout为零,则使用ReadTimeout的值 | time.Duration(nil) |
ReadBufferSize (读取缓冲大小) |
每个请求读取的连接缓冲区大小。这也限制了最大标题大小。如果客户端发送大KB请求或标头(如大cookie),应增加此缓冲区 | int(4096) |
WriteBufferSize (写入缓冲大小) |
响应写入的每个连接缓冲区大小 | int(4096) |
CompressedFileSuffix (压缩文件后缀) |
为原始文件名添加后缀,并尝试以新文件名保存生成的压缩文件 | string(".fiber.gz") |
ProxyHeader (代理头) |
这将使c.IP()能够返回给定标头键的值 默认情况下,c.IP()将从TCP连接返回远程IP,如果您在负载平衡器后面,例如X-Forwarded-,则此属性可能很有用 |
string("") |
GETOnly (仅限GET) |
如果设置为true,则拒绝所有非GET请求。请求大小受ReadBufferSize限制 | bool(false) |
ErrorHandler (错误请求头) |
当fiber返回错误时,执行ErrorHandler处理程序 安装的fiber错误处理程序由顶级应用程序保留,并应用于前缀相关请求 |
ErrorHandler(DefaultErrorHandler) |
DisableKeepalive (关闭连接) |
禁用保持活动连接,服务器将在向客户端发送第一个响应后关闭传入连接 | bool(false) |
DisableDefaultDate (关闭默认时间) |
当设置为true时,将导致从响应中排除默认日期头。 | bool(false) |
DisableDefaultContentType (关闭默认内容类型) |
设置为true时,将导致从响应中排除默认内容类型标题。 | bool(false) |
DisableHeaderNormalizing (关闭头名称标题化) |
默认情况下,所有标题名称都是标准化的:conteNT-tYPE->Content-Type | bool(false) |
DisableStartupMessage (关闭调试信息) |
设置为true时,它不会打印调试信息 | bool(false) |
DisablePreParseMultipartForm (关闭表单数据预解析) |
此选项对希望将多部分表单数据视为二进制或自定义选择何时解析数据的服务器非常有用 | bool(false) |
EnableTrustedProxyCheck (启用可信任代理检查) |
设置为true时,fiber将使用TrustedProxy列表检查代理是否受信任。 默认情况下,c.Protocol()将从X-Forwarded-Proto、X-Forwarded-Protocol、X-Forwarded-Ssl或X-Url-Scheme头获取值,c.IP()将从代理头获取值,c.Hostname()将从X-Forwarded-Host头获取值。 如果EnableTrustedProxyCheck为true,并且RemoteIP在受信任代理的列表中c.Protocol(),c.IP()和c.Hostname()将在禁用受信任代理时具有相同的行为,如果RemoteIP不在列表中,c.Protocol()将在应用程序处理tls连接时返回https,否则,c.IP()将从fasthttp上下文返回RemoteIP(),c.Hostname()将返回fasthttp.Request.URI().Host() |
bool(false) |
TrustedProxies (可信任代理) |
包含受信任代理IP的列表。支持固定IP或IP范围 | []string([]string*__*) |
EnablePrintRoutes (启用打印路由) |
允许打印所有路由及其方法、路径、名称和处理程序 | bool(false) |
DisablePrepareSMultipartForm (关闭复合文件表单) |
如果设置为true,则不会预解析多部分表单数据。此选项对于希望将多部分表单数据视为二进制blob或选择何时解析数据的服务器非常有用 | bool(false) |
StreamRequestBody (流媒体请求内容) |
StreamRequestBody启用请求正文流,并在给定正文大于当前限制时更快调用处理程序。 | bool(false) |
Network (网络) |
可选的值有tcp、tcp4和tcp6,当prefork设置为true时,只能选择“tcp4”和“tcp6” | string(tcp4) |
JSONDecoder (自定义json解码函数) |
使用另一个 json 库进行解码 | func(json.Unmarshal) |
JSONEncoder (自定义json编码函数) |
使用另一个 json 库进行编码 | func(json.Marshal) |
XMLEncoder (自定义xml编码函数) |
使用另一个xml库进行编码 | func(xml.Marshal) |
创建NewError对象
NewError 使用可选消息创建一个新的 httperror 实例
func NewError(code int, message ...string) *Error
app.Get("/", func(c *fiber.Ctx) error {
return fiber.NewError(782, "Custom error message")
})
确定当前进程是否是预处理结果
func IsChild() bool
//预处理将产生子进程
app := fiber.New(fiber.Config{
Prefork: true,
})
if !fiber.IsChild() {
fmt.Println("I'm the parent process")
} else {
fmt.Println("I'm a child process")
}