[TOC]
  • 配置组加载配置类型介绍1.通过结构体加载配置目录结构代码示例2.通过toml加载配置目录结构代码示例3.通过YAML加载配置目录结构代码示例4.直接通过单个配置选项配置目录结构代码示例Built’n配置器自定义配置器

配置组

所有配置的值都有默认值,所有你可以直接使用iris.New()

在listen函数之前配置是没用的,所以应该在Application#Run / 2(第二个参数)上传递它

Iris有一个名为Configurator的类型,它是一个func(* iris.Application),任何函数完成此操作可以在Application#Configure或Application#Run/2中传递。

Application#ConfigurationReadOnly()返回配置值.

加载配置类型介绍

1.通过结构体加载配置

目录结构

主目录fromConfigurationStructure

    —— main.go

代码示例

main.go

package mainimport (    "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之前:    // app.Configure(iris.WithConfiguration(iris.Configuration{...}))}

2.通过toml加载配置

目录结构

主目录fromTomlFile

    —— main.go    —— configs        —— iris.tml

代码示例

main.go

package mainimport (    "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之前加载:    // app.Configure(iris.WithConfiguration(iris.TOML("./configs/iris.tml")))    // app.Run(iris.Addr(":8080"))}

/configs/iris.tml

DisablePathCorrection = falseEnablePathEscape = falseFireMethodNotAllowed = trueDisableBodyConsumptionOnUnmarshal = falseTimeFormat = "Mon, 01 Jan 2006 15:04:05 GMT"Charset = "UTF-8"[Other]    MyServerName = "iris"

3.通过YAML加载配置

目录结构

主目录fromYamlFile

    —— main.go    —— configs        —— iris.yml

代码示例

main.go

package mainimport (    "github.com/kataras/iris")func main() {    app := iris.New()    app.Get("/", func(ctx iris.Context) {        ctx.HTML("<b>Hello!</b>")    })    // [...]    //当你有两个配置时很好,一个用于开发,另一个用于生产用途。    //如果iris.YAML的输入字符串参数为“〜”,则它从主目录加载配置    //并且可以在许多iris实例之间共享。    app.Run(iris.Addr(":8080"), iris.WithConfiguration(iris.YAML("./configs/iris.yml")))    // 在run之前加载:    // app.Configure(iris.WithConfiguration(iris.YAML("./configs/iris.yml")))    // app.Run(iris.Addr(":8080"))}

/configs/iris.yml

DisablePathCorrection: falseEnablePathEscape: falseFireMethodNotAllowed: trueDisableBodyConsumptionOnUnmarshal: trueTimeFormat: Mon, 01 Jan 2006 15:04:05 GMTCharset: UTF-8

4.直接通过单个配置选项配置

目录结构

主目录functional

    —— main.go

代码示例

main.go

package mainimport (    "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"))    // 在run之前加载:    // app.Configure(iris.WithoutStartupLog, iris.WithCharset("UTF-8"))    // app.Run(iris.Addr(":8080"))}

Built’n配置器

// WithoutServerError将忽略错误,来自主应用程序的`Run`函数。// 用法:// err:= app.Run(iris.Addr(":8080"),iris.WithoutServerError(iris.ErrServerClosed))// 如果服务器的错误是`http/iris#ErrServerClosed`,//将返回`nil`。// 也参见`Configuration#IgnoreServerErrors [] string`。// 示例: https://github.com/kataras/iris/tree/master/_examples/http-listening/listen-addr/omit-server-errorsfunc WithoutServerError(errors ...error) Configurator//WithoutStartupLog 将关闭第一次运行终端就发送信息var WithoutStartupLog// WithoutInterruptHandler禁用自动正常服务器关闭,当按下control / cmd + C时var WithoutInterruptHandler// WithoutPathCorrection禁用PathCorrection设置//参见`配置`var WithoutPathCorrection// WithoutBodyConsumptionOnUnmarshal禁用BodyConsumptionOnUnmarshal设置//参见`配置`var WithoutBodyConsumptionOnUnmarshal// WithoutAutoFireStatusCode禁用AutoFireStatusCode设置//参见`配置`var WithoutAutoFireStatusCode// WithPathEscape使PathEscape设置变为enanbles//参见`配置`var WithPathEscape// WithOptimizations可以强制应用程序优化以获得尽可能最佳的性能//参见`配置`var WithOptimizations// WithFireMethodNotAllowed使FireMethodNotAllowed设置变为可用//参见`配置`var WithFireMethodNotAllowed//使用时间格式设置时间格式设置//参见`配置`func WithTimeFormat(timeformat string) Configurator// WithCharset设置Charset设置//参见`配置`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根据其他设置的键添加值//参见`配置`func WithOtherValue(key string, val interface{}) Configurator

自定义配置器

使用Configurator,开发人员可以轻松地模块化他们的应用程序,示例:

// 文件名称 counter/counter.gopackage counterimport (    "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.gopackage mainimport (    "counter"    "github.com/kataras/iris")func main() {    app := iris.New()    app.Configure(counter.Configurator)    app.Run(iris.Addr(":8080"))}