配置信息

未匹配的标注

配置

所有的配置项都是有默认值的,所有配置都会在当使用  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"))
}

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/iris-go/10/conf...

译文地址:https://learnku.com/docs/iris-go/10/conf...

上一篇 下一篇
讨论数量: 1
发起讨论 只看当前版本


justJoe
文档阅读时,选中代码块,页面出现bug
0 个点赞 | 1 个回复 | 分享 | 课程版本 10