配置组

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

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

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

Application#ConfigurationReadOnly()返回配置值.

加载配置类型介绍

1.通过结构体加载配置

目录结构

主目录fromConfigurationStructure

  1. —— main.go

代码示例

main.go

  1. package main
  2. import (
  3. "github.com/kataras/iris"
  4. )
  5. func main() {
  6. app := iris.New()
  7. app.Get("/", func(ctx iris.Context) {
  8. ctx.HTML("<b>Hello!</b>")
  9. })
  10. // [...]
  11. //当您想要修改整个配置时非常容易。
  12. app.Run(iris.Addr(":8080"), iris.WithConfiguration(iris.Configuration{ //默认配置:
  13. DisableStartupLog: false,
  14. DisableInterruptHandler: false,
  15. DisablePathCorrection: false,
  16. EnablePathEscape: false,
  17. FireMethodNotAllowed: false,
  18. DisableBodyConsumptionOnUnmarshal: false,
  19. DisableAutoFireStatusCode: false,
  20. TimeFormat: "Mon, 02 Jan 2006 15:04:05 GMT",
  21. Charset: "UTF-8",
  22. }))
  23. // 或在run之前:
  24. // app.Configure(iris.WithConfiguration(iris.Configuration{...}))
  25. }

2.通过toml加载配置

目录结构

主目录fromTomlFile

  1. —— main.go
  2. —— configs
  3. —— iris.tml

代码示例

main.go

  1. package main
  2. import (
  3. "github.com/kataras/iris"
  4. )
  5. func main() {
  6. app := iris.New()
  7. app.Get("/", func(ctx iris.Context) {
  8. ctx.HTML("<b>Hello!</b>")
  9. })
  10. // [...]
  11. //当你有两个配置时很好,一个用于开发,另一个用于生产用途。
  12. app.Run(iris.Addr(":8080"), iris.WithConfiguration(iris.TOML("./configs/iris.tml")))
  13. // 会run之前加载:
  14. // app.Configure(iris.WithConfiguration(iris.TOML("./configs/iris.tml")))
  15. // app.Run(iris.Addr(":8080"))
  16. }

/configs/iris.tml

  1. DisablePathCorrection = false
  2. EnablePathEscape = false
  3. FireMethodNotAllowed = true
  4. DisableBodyConsumptionOnUnmarshal = false
  5. TimeFormat = "Mon, 01 Jan 2006 15:04:05 GMT"
  6. Charset = "UTF-8"
  7. [Other]
  8. MyServerName = "iris"

3.通过YAML加载配置

目录结构

主目录fromYamlFile

  1. —— main.go
  2. —— configs
  3. —— iris.yml

代码示例

main.go

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

/configs/iris.yml

  1. DisablePathCorrection: false
  2. EnablePathEscape: false
  3. FireMethodNotAllowed: true
  4. DisableBodyConsumptionOnUnmarshal: true
  5. TimeFormat: Mon, 01 Jan 2006 15:04:05 GMT
  6. Charset: UTF-8

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

目录结构

主目录functional

  1. —— main.go

代码示例

main.go

  1. package main
  2. import (
  3. "github.com/kataras/iris"
  4. )
  5. func main() {
  6. app := iris.New()
  7. app.Get("/", func(ctx iris.Context) {
  8. ctx.HTML("<b>Hello!</b>")
  9. })
  10. // [...]
  11. //当您想要更改某些配置字段时,这很好。
  12. //前缀:With,代码编辑器将帮助您浏览所有内容
  13. //配置选项,甚至没有参考文档的类型。
  14. app.Run(iris.Addr(":8080"), iris.WithoutStartupLog, iris.WithCharset("UTF-8"))
  15. // 在run之前加载:
  16. // app.Configure(iris.WithoutStartupLog, iris.WithCharset("UTF-8"))
  17. // app.Run(iris.Addr(":8080"))
  18. }

Built'n配置器

  1. // WithoutServerError将忽略错误,来自主应用程序的`Run`函数。
  2. // 用法:
  3. // err:= app.Run(iris.Addr(":8080"),iris.WithoutServerError(iris.ErrServerClosed))
  4. // 如果服务器的错误是`http/iris#ErrServerClosed`,//将返回`nil`。
  5. // 也参见`Configuration#IgnoreServerErrors [] string`。
  6. // 示例: https://github.com/kataras/iris/tree/master/_examples/http-listening/listen-addr/omit-server-errors
  7. func WithoutServerError(errors ...error) Configurator
  8. //WithoutStartupLog 将关闭第一次运行终端就发送信息
  9. var WithoutStartupLog
  10. // WithoutInterruptHandler禁用自动正常服务器关闭,当按下control / cmd + C时
  11. var WithoutInterruptHandler
  12. // WithoutPathCorrection禁用PathCorrection设置
  13. //参见`配置`
  14. var WithoutPathCorrection
  15. // WithoutBodyConsumptionOnUnmarshal禁用BodyConsumptionOnUnmarshal设置
  16. //参见`配置`
  17. var WithoutBodyConsumptionOnUnmarshal
  18. // WithoutAutoFireStatusCode禁用AutoFireStatusCode设置
  19. //参见`配置`
  20. var WithoutAutoFireStatusCode
  21. // WithPathEscape使PathEscape设置变为enanbles
  22. //参见`配置`
  23. var WithPathEscape
  24. // WithOptimizations可以强制应用程序优化以获得尽可能最佳的性能
  25. //参见`配置`
  26. var WithOptimizations
  27. // WithFireMethodNotAllowed使FireMethodNotAllowed设置变为可用
  28. //参见`配置`
  29. var WithFireMethodNotAllowed
  30. //使用时间格式设置时间格式设置
  31. //参见`配置`
  32. func WithTimeFormat(timeformat string) Configurator
  33. // WithCharset设置Charset设置
  34. //参见`配置`
  35. func WithCharset(charset string) Configurator
  36. // WithRemoteAddrHeader启用或添加新的或现有的请求标头名称
  37. // 可用于验证客户端的真实IP
  38. //现有值为:
  39. //"X-Real-Ip":false,
  40. //"X-Forwarded-For":false,
  41. //"CF-Connecting-IP":false
  42. //查看`context.RemoteAddr()`了解更多信息
  43. func WithRemoteAddrHeader(headerName string) Configurator
  44. // WithoutRemoteAddrHeader禁用现有的请求标头名称
  45. //可用于验证客户端的真实IP。
  46. //现有值为:
  47. //"X-Real-Ip":false,
  48. //"X-Forwarded-For":false,
  49. //"CF-Connecting-IP":false
  50. //查看`context.RemoteAddr()`了解更多信息
  51. func WithoutRemoteAddrHeader(headerName string) Configurator
  52. // WithOtherValue根据其他设置的键添加值
  53. //参见`配置`
  54. func WithOtherValue(key string, val interface{}) Configurator

自定义配置器

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

  1. // 文件名称 counter/counter.go
  2. package counter
  3. import (
  4. "time"
  5. "github.com/kataras/iris"
  6. "github.com/kataras/iris/core/host"
  7. )
  8. func Configurator(app *iris.Application) {
  9. counterValue := 0
  10. go func() {
  11. ticker := time.NewTicker(time.Second)
  12. for range ticker.C {
  13. counterValue++
  14. }
  15. app.ConfigureHost(func(h *host.Supervisor) { // < - 这里:重要的
  16. h.RegisterOnShutdown(func() {
  17. ticker.Stop()
  18. })
  19. })
  20. }()
  21. app.Get("/counter", func(ctx iris.Context) {
  22. ctx.Writef("Counter value = %d", counterValue)
  23. })
  24. }
  1. // 文件名称: main.go
  2. package main
  3. import (
  4. "counter"
  5. "github.com/kataras/iris"
  6. )
  7. func main() {
  8. app := iris.New()
  9. app.Configure(counter.Configurator)
  10. app.Run(iris.Addr(":8080"))
  11. }