2025年3月25日 星期二 甲辰(龙)年 月廿四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Go语言

gookit/ini 使用 INI 格式文件作为配置

时间:12-14来源:作者:点击数:2

使用 INI 格式文件作为配置,配置数据的加载,管理,使用。

  • 使用简单(获取: Int Int64 Bool String StringMap ..., 设置: Set )
  • 支持多文件,数据加载
  • 支持数据覆盖合并
  • 支持将数据重新绑定到结构体
  • 支持解析 ENV 变量名
  • 支持变量参考,默认兼容Python的configParser格式 %(VAR)s
  • 完善的单元测试(coverage > 90%)

更多格式

如果你想要更多文件内容格式的支持,推荐使用 gookit/config

  • gookit/config - 支持多种格式: JSON(default), INIYAMLTOMLHCL

安装

  • go get github.com/gookit/ini/v2

快速使用

示例数据(testdata/test.ini):

  • # comments
  • name = inhere
  • age = 50
  • debug = true
  • hasQuota1 = 'this is val'
  • hasQuota2 = "this is val1"
  • can2arr = val0,val1,val2
  • shell = ${SHELL}
  • noEnv = ${NotExist|defValue}
  • nkey = val in default section
  • ; comments
  • [sec1]
  • key = val0
  • some = value
  • stuff = things
  • varRef = %(nkey)s

载入数据

  • package main
  • import (
  • "github.com/gookit/ini/v2"
  • )
  • // go run ./examples/demo.go
  • func main() {
  • // err := ini.LoadFiles("testdata/tesdt.ini")
  • // LoadExists 将忽略不存在的文件
  • err := ini.LoadExists("testdata/test.ini", "not-exist.ini")
  • if err != nil {
  • panic(err)
  • }
  • // 加载更多,相同的键覆盖之前数据
  • err = ini.LoadStrings(`
  • age = 100
  • [sec1]
  • newK = newVal
  • some = change val
  • `)
  • // fmt.Printf("%v\n", ini.Data())
  • }

获取数据

获取整型

  • age := ini.Int("age")
  • fmt.Print(age) // 100

获取布尔值

  • val := ini.Bool("debug")
  • fmt.Print(val) // true

获取字符串

  • name := ini.String("name")
  • fmt.Print(name) // inhere

获取section数据(string map)

  • val := ini.StringMap("sec1")
  • fmt.Println(val)
  • // map[string]string{"key":"val0", "some":"change val", "stuff":"things", "newK":"newVal"}

获取的值是环境变量

  • value := ini.String("shell")
  • fmt.Printf("%q", value) // "/bin/zsh"

通过key path来直接获取子级值

  • value := ini.String("sec1.key")
  • fmt.Print(value) // val0

支持变量参考

  • value := ini.String("sec1.varRef")
  • fmt.Printf("%q", value) // "val in default section"

设置新的值

  • // set value
  • ini.Set("name", "new name")
  • name = ini.String("name")
  • fmt.Printf("%q", value) // "new name"

将数据映射到结构

  • type User struct {
  • Name string
  • Age int
  • }
  • user := &User{}
  • ini.MapStruct(ini.DefSection(), user)
  • dump.P(user)

变量参考解析

  • [portal]
  • url = http://%(host)s:%(port)s/Portal
  • host = localhost
  • port = 8080

启用变量解析后,将会解析这里的 %(host)s 并替换为相应的变量值 localhost

  • cfg := ini.New()
  • // 启用变量解析
  • cfg.WithOptions(ini.ParseVar)
  • fmt.Print(cfg.String("portal.url"))
  • // OUT:
  • // http://localhost:8080/Portal

可用选项

  • type Options struct {
  • // 设置为只读模式. default False
  • Readonly bool
  • // 解析 ENV 变量名称. default True
  • ParseEnv bool
  • // 解析变量引用 "%(varName)s". default False
  • ParseVar bool
  • // 变量左侧字符. default "%("
  • VarOpen string
  • // 变量右侧字符. default ")s"
  • VarClose string
  • // 忽略键名称大小写. default False
  • IgnoreCase bool
  • // 默认的section名称. default "__default"
  • DefSection string
  • // 路径分隔符,当通过key获取子级值时. default ".", 例如 "section.subKey"
  • SectionSep string
  • }
  • 应用选项
  • cfg := ini.New()
  • cfg.WithOptions(ini.ParseEnv,ini.ParseVar, func (opts *Options) {
  • opts.SectionSep = ":"
  • opts.DefSection = "default"
  • })

参考

github 地址:https://github.com/gookit/ini

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐