# 配置信息

iris框架开发中,初始化应用程序时已经使用了默认的配置值。作为开发者,我们可以不需要其他额外的配置就启动我们的应用程序。 如果开发者想要自己根据自己的需求进行配置,iris框架也是支持的,下面我们一起来学习一下iris框架所支持的配置方式。 现在主流的配置文件格式有:xmlyamlcnftomljson等等格式。xml现在使用的已经不多,cnf格式的配置文件适合数据库的配置文件。

# 1 配置参数说明

iris程序的全局app实例中,支持通过多种方式进行代码配置,途径是多样的。都是对app服务应用进行Configuration配置,提供应用配置的Configuration结构体定义所支持的配置项如下表:

  • 1、使用app.Configure(iris.WithConfiguration(iris.Configuration{DisableStartuplog:false}))来对整体应用进行配置项配置
  • 2、通过app.Run方法的第二个参数来进行相关的自定义配置项的配置,第二个参数的类型同1一致。

# 1.1 Configuration支持的配置项

配置参数 描述说明
DisableInterruptHandler 如果设置为true,当人为中断程序执行时,则不会自动正常将服务器关闭。如果设置为true,需要自己自定义处理。默认为false
DisablePathCorrection 该配置项表示更正并将请求的路径重定向到已注册的路径。比如:如果请求/home/ 但找不到此Route的处理程序,然后路由器检查/home处理程序是否存在,如果是,(permant)将客户端重定向到正确的路径/home。默认为false
EnablePathEscape 该配置选项用于配置是否支持路径转义。适用于请求url中包含转义字符时进行配置。默认为false
FireMethodNotAllowed 默认为false
DisableBodyConsumptionOnUnmarshal 该设置选项用于配置读取请求数据的方法是否使用,如果设置为true,则表示禁用context.UnmarshalBody,context.ReadJSON以及context.ReadXML。默认为false
DisableAutoFireStatusCode 该配置变量为控制是否处理错误自动执行,如果为true,则不会进行错误自动执行。该配置项默认为false
TimeFormat 时间格式。默认格式为:"Mon, 02 Jan 2006 15:04:05 GMT"
Charset 字体格式选项。默认字体为:"UTF-8"

# 1.2 程序内部配置示例

package main

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

func main() {
	app := iris.New()
	app.Get("/", func(ctx iris.Context) {
		ctx.HTML("<b>Hello!</b>")
	})
	// [...]
	//我们可以用这种方法单独定义我们的配置项
	app.Configure(iris.WithConfiguration(iris.Configuration{ DisableStartupLog:false}))
	//也可以使用app.run的第二个参数,第二个参数的类型同app.Configure()参数一致。
	app.Run(iris.Addr(":9090"), iris.WithConfiguration(iris.Configuration{
		DisableInterruptHandler:           false,
		DisablePathCorrection:             false,
		EnablePathEscape:                  false,
		FireMethodNotAllowed:              false,
		DisableBodyConsumptionOnUnmarshal: false,
		DisableAutoFireStatusCode:         false,
		TimeFormat:                        "Mon, 02 Jan 2006 15:04:05 GMT",
		Charset:                           "UTF-8",
	}))
	//通过多参数配置 但是上面两种方式是我们最推荐的
	// 我们使用With+配置项名称 如WithCharset("UTF-8") 其中就是With+ Charset的组合
	//app.Run(iris.Addr(":9090"), iris.WithoutStartupLog, iris.WithCharset("UTF-8"))
	//当使用app.Configure(iris.WithoutStartupLog, iris.WithCharset("UTF-8"))设置配置项时
	//需要app.run()面前使用
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# 2 通过TOML配置文件

# 2.1 什么是toml

tomlTom’s Obvious, Minimal Language的缩写,toml是一种配置文件。TOML是前GitHub CEO,Tom Preston-Werner,于2013年创建的语言,其目标是成为一个小规模的易于使用的语义化配置文件格式。TOML被设计为可以无二义性的转换为一个哈希表(Hash table)

# 2.2 项目配置使用TOML

具体的项目配置使用中,我们需要创建iris.tml类型的配置文件,并在程序中明确使用toml文件进行读取配置内容。如下所示:

//app := iris.New()
app.Configure(iris.WithConfiguration(iris.TOML("./config/iris.tml")))
1
2

# 2.3 TOML使用示例

我们在config目录下新建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"
1
2
3
4
5
6
7
8
package main
import (
	"github.com/kataras/iris/v12"
)
func main() {
	app := iris.New()
	app.Get("/", func(ctx iris.Context) {
		ctx.HTML("<b>Hello Toml!</b>")
	})
	// 通过文件配置 我们可以更加方便的切换开发环境配置和生产环境.
	app.Run(iris.Addr(":9090"), iris.WithConfiguration(iris.TOML("./config/iris.tml")))
}
1
2
3
4
5
6
7
8
9
10
11
12

# 3 通过YAML配置文件

# 3.1 什么是yaml

YAML是专门用来写配置文件的语言,写法简洁、功能强大,比JSON格式还要方便。Yaml实质上是一种通用的数据串行化格式。Yaml的主要语法格式有以下几项:

  • 大小写敏感。
  • 使用缩进表示层级关系。
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不受限制,相同层级的配置元素,左侧对齐即可。

# 3.2 项目配置使用YAML

具体的项目配置使用中,我们需要创建config.yml类型的配置文件,并在程序中明确使用yaml文件进行读取配置内容。如下所示:

//app := iris.New()
app.Configure(iris.WithConfiguration(iris.TOML("./config/config.tml")))
1
2

# 3.3 YAML使用示例

我们在config目录下新建config.tml文件,文件内容如下

DisablePathCorrection: false
EnablePathEscape: false
FireMethodNotAllowed: true
DisableBodyConsumptionOnUnmarshal: true
TimeFormat: Mon, 01 Jan 2006 15:04:05 GMT
Charset: UTF-8
1
2
3
4
5
6
package main
import (
	"github.com/kataras/iris/v12"
)
func main() {
	app := iris.New()
	app.Get("/", func(ctx iris.Context) {
		ctx.HTML("<b>Hello Yaml!</b>")
	})
	// 通过文件配置 我们可以更加方便的切换开发环境配置和生产环境.
	app.Run(iris.Addr(":9090"), iris.WithConfiguration(iris.YAML("./config/config.yml")))
}
1
2
3
4
5
6
7
8
9
10
11
12

# 4 自定义配置文件

这里我给大家演示如何使用json格式的配置文件来进行应用的配置,然后从应用程序中进行读取。我们在config目录下新建config.json文件,文件内容如下

{
  "appname": "IrisDemo",
  "port": 8000
}
1
2
3
4
package main

import (
	"encoding/json"
	"fmt"
	"github.com/kataras/iris/v12"
	"os"
)

//读取json文件的结构体
//json文件里面有多少项参数就对应多少个属性
type Coniguration struct {
	Appname string `json:"appname"`
	Port    int    `json:"port"`
}

func main() {
	app := iris.New()
	//打开文件
	file, _ := os.Open("./config/config.json")
	//关闭文件
	defer file.Close()
	decoder := json.NewDecoder(file)
	//声明要接收文件内容的结构体
	conf := Coniguration{}
	//读取json配置文件对应的值
	err := decoder.Decode(&conf)
	if err != nil {
		fmt.Println("Error:", err)
	}
	//读取文件中的端口号
	fmt.Println(conf.Port)
	app.Run(iris.Addr(":8085"))
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34