iris 配置信息和文件

iris 所有的配置项都有默认值,所有默认配置都会在当使用 iris.New() 时设置。

配置项在监听函数调用之前是无效的,它需要作为 iris.Application.Run 函数的参数传入。

Run 配置信息参数有多种形式: Configuration结构体、预定义选项、TOML配置文件、YAML配置文件等。

1. 通过 Configuration 结构体

package main

import (
    "github.com/kataras/iris"
)

func main() {
    app := iris.New()
    app.Get("/", func(ctx iris.Context) {
        ctx.HTML("<h1>Hello World</h1>")
    })
    // [...]

    // 改变配置
    app.Run(iris.Addr(":8000"), 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",
    }))
}

2. 通过预定义选项

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"))
}

3. 通过 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")))
}

4. 通过 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")))
}

5. 内建配置选项

// 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

6. 自定义配置器

使用 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"))
}

下一章:iris HTTP 路由

 1. HandlerHandler 是一个用于处理 HTTP 请求的函数。我们可以通过 Context.Request() 获得的请求数据,然后把响应头和数据写入 Context.ResponseWri ...