键名映射器(Name Mapper)

为了节省您的时间并简化代码,本库支持类型为 NameMapper 的名称映射器,该映射器负责结构字段名与分区名和键名之间的映射。

目前有 2 款内置的映射器:

  • AllCapsUnderscore:该映射器将字段名转换至格式 ALL_CAPS_UNDERSCORE 后再去匹配分区名和键名。
  • TitleUnderscore:该映射器将字段名转换至格式 title_underscore 后再去匹配分区名和键名。

使用方法:

  1. type Info struct {
  2. PackageName string
  3. }
  4. func main() {
  5. err = ini.MapToWithMapper(&Info{}, ini.TitleUnderscore, []byte("package_name=ini"))
  6. // ...
  7. cfg, err := ini.Load([]byte("PACKAGE_NAME=ini"))
  8. // ...
  9. info := new(Info)
  10. cfg.NameMapper = ini.AllCapsUnderscore
  11. err = cfg.MapTo(info)
  12. // ...
  13. }

使用函数 ini.ReflectFromWithMapper 时也可应用相同的规则。

键值映射器(Value Mapper)

值映射器允许使用一个自定义函数自动展开值的具体内容,例如在运行时获取环境变量:

  1. type Env struct {
  2. Foo string `ini:"foo"`
  3. }
  4. func main() {
  5. cfg, err := ini.Load([]byte("[env]\nfoo = ${MY_VAR}\n")
  6. cfg.ValueMapper = os.ExpandEnv
  7. // ...
  8. env := &Env{}
  9. err = cfg.Section("env").MapTo(env)
  10. }

本例中,env.Foo 将会是运行时所获取到环境变量 MY_VAR 的值。