iris:配置文件类型

配置组

所有配置的值都有默认值,所以你可以直接使用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 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",
    }))
    // 或者
     //app.Configure(iris.WithConfiguration(iris.Configuration{...}))
    // app.Run(iris.Addr(":8080"))
}

2.通过toml加载配置

目录结构

主目录fromTomlFile

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

代码示例

main.go

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

/configs/iris.tml

DisablePathCorrection = false
EnablePathEscape = false
FireMethodNotAllowed = true
DisableBodyConsumptionOnUnmarshal = false
TimeFormat = "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 main

import (
    "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: false
EnablePathEscape: false
FireMethodNotAllowed: true
DisableBodyConsumptionOnUnmarshal: true
TimeFormat: Mon, 01 Jan 2006 15:04:05 GMT
Charset: UTF-8

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

目录结构

主目录functional

  —— main.go

代码示例

main.go

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"))
    // 在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-errors
func 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.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"))
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值