配置信息
配置
所有的配置项都是有默认值的,所有配置都会在当使用 iris.New()
时发挥功效。
配置在监听函数调用之前是无效的,所以它应该被作为 Application#Run/2
(第二个参数)传入。
Iris 有一个名为 Configurator
的类型,它的实际类型是 func(*iris.Application)
,任何此类型的函数可以传入 Application#Configure
或者 Application#Run/2
。
Application#ConfigurationReadOnly()
返回配置值。
.Run
通过 Configuration
结构体
package main
import (
"github.com/kataras/iris"
)
func main() {
app := iris.New()
app.Get("/", func(ctx iris.Context) {
ctx.HTML("<b>Hello!</b>")
})
// [...]
// 当你想改变整个配置的时候这样做是比较好的
app.Run(iris.Addr(":8080"), iris.WithConfiguration(iris.Configuration{
DisableStartupLog: false,
DisableInterruptHandler: false,
DisablePathCorrection: false,
EnablePathEscape: false,
FireMethodNotAllowed: false,
DisableBodyConsumptionOnUnmarshal: false,
DisableAutoFireStatusCode: false,
TimeFormat: "Mon, 02 Jan 2006 15:04:05 GMT",
Charset: "UTF-8",
}))
}
.Run
通过选项
package main
import (
"github.com/kataras/iris"
)
func main() {
app := iris.New()
app.Get("/", func(ctx iris.Context) {
ctx.HTML("<b>Hello!</b>")
})
// [...]
// 当你想更变一些配置项的时候这样做。
// 前缀:"With",代码比较器将帮助你查看所有可用配置
app.Run(iris.Addr(":8080"), iris.WithoutStartupLog, iris.WithCharset("UTF-8"))
// or before run:
// app.Configure(iris.WithoutStartupLog, iris.WithCharset("UTF-8"))
// app.Run(iris.Addr(":8080"))
}
.Run
通过 TOML 配置文件
DisablePathCorrection = false
EnablePathEscape = false
FireMethodNotAllowed = true
DisableBodyConsumptionOnUnmarshal = false
TimeFormat = "Mon, 01 Jan 2006 15:04:05 GMT"
Charset = "UTF-8"
[Other]
MyServerName = "iris"
package main
import (
"github.com/kataras/iris"
)
func main() {
app := iris.New()
app.Get("/", func(ctx iris.Context) {
ctx.HTML("<b>Hello!</b>")
})
// [...]
// 当你有两份不同的配置时这样使用,一份用于开发,一份用于生产
app.Run(iris.Addr(":8080"), iris.WithConfiguration(iris.TOML("./configs/iris.tml")))
}
.Run
或者通过 YAML 文件
DisablePathCorrection: false
EnablePathEscape: false
FireMethodNotAllowed: true
DisableBodyConsumptionOnUnmarshal: true
TimeFormat: Mon, 01 Jan 2006 15:04:05 GMT
Charset: UTF-8
package main
import (
"github.com/kataras/iris"
)
func main() {
app := iris.New()
app.Get("/", func(ctx iris.Context) {
ctx.HTML("<b>Hello!</b>")
})
// [...]
app.Run(iris.Addr(":8080"), iris.WithConfiguration(iris.YAML("./configs/iris.yml")))
}
内建配置器
// WithoutServerError 将会忽略从主应用的 `Run` 函数返回的 "errors"
//
// 用法:
// err := app.Run(iris.Addr(":8080"), iris.WithoutServerError(iris.ErrServerClosed))
// 将返回 nil ,如果服务器的错误是 `http/iris#ErrServerClosed`
//
// 查看 `Configuration#IgnoreServerErrors []string` 。
//
// 例子: https://github.com/kataras/iris/tree/master/_examples/http-listening/listen-addr/omit-server-errors
func WithoutServerError(errors ...error) Configurator
// WithoutStartupLog 将关闭服务打开时一次性发送到终端的信息
var WithoutStartupLog
// WithoutInterruptHandler 将会在按 control/cmd+C 时禁用自动平滑服务关闭功能。
var WithoutInterruptHandler
// WithoutPathCorrection 禁用 PathCorrection 设置。
//
// 查看 `Configuration`。
var WithoutPathCorrection
// WithoutBodyConsumptionOnUnmarshal 禁用 BodyConsumptionOnUnmarshal 设置。
//
// 查看 `Configuration`。
var WithoutBodyConsumptionOnUnmarshal
// WithoutAutoFireStatusCode 禁用 AutoFireStatusCode 设置。
//
// 查看 `Configuration`.
var WithoutAutoFireStatusCode
// WithPathEscape 开启 PathEscape 设置.
//
// 查看 `Configuration`.
var WithPathEscape
// WithOptimizations 会强制应用进行最佳性能优化。
//
// 查看 `Configuration`。
var WithOptimizations
// WithFireMethodNotAllowed 开启 FireMethodNotAllowed 设置。
//
// 参考 `Configuration`。
var WithFireMethodNotAllowed
// WithTimeFormat 设置 TimeFormat。
//
// 参考 `Configuration`。
func WithTimeFormat(timeformat string) Configurator
// WithCharset 设置 Charset 。
//
// 参考 `Configuration`.
func WithCharset(charset string) Configurator
// WithRemoteAddrHeader 将会允许现有的或者添加新的请求头用于鉴别客户端真实IP。
//
// 现有的头部是:
// "X-Real-Ip": false,
// "X-Forwarded-For": false,
// "CF-Connecting-IP": false
//
// 更多请看 `context.RemoteAddr()` 。
func WithRemoteAddrHeader(headerName string) Configurator
// WithoutRemoteAddrHeader 禁用现有的用于鉴别客户端真是IP的头。
// 现有的头部是:
// "X-Real-Ip": false,
// "X-Forwarded-For": false,
// "CF-Connecting-IP": false
//
// 更多请看 `context.RemoteAddr()`。
func WithoutRemoteAddrHeader(headerName string) Configurator
// WithOtherValue 添加用于其他设置。
// 查看 `Configuration`.
func WithOtherValue(key string, val interface{}) Configurator
自定义配置器
使用 Configurator
开发者可以轻松地模块化他们的应用程序。
示例代码:
// 文件 counter/counter.go
package counter
import (
"time"
"github.com/kataras/iris"
"github.com/kataras/iris/core/host"
)
func Configurator(app *iris.Application) {
counterValue := 0
go func() {
ticker := time.NewTicker(time.Second)
for range ticker.C {
counterValue++
}
app.ConfigureHost(func(h *host.Supervisor) { // <- 这里: 很重要
h.RegisterOnShutdown(func() {
ticker.Stop()
})
})
}()
app.Get("/counter", func(ctx iris.Context) {
ctx.Writef("Counter value = %d", counterValue)
})
}
// 文件: main.go
package main
import (
"counter"
"github.com/kataras/iris"
)
func main() {
app := iris.New()
app.Configure(counter.Configurator)
app.Run(iris.Addr(":8080"))
}
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: