aconfig

Delphi源码 2025-08-10

aconfig

简单,有用且有用的配置加载程序。

理由

关于GO中的配置加载有许多解决方案。我一直在寻找一个易于使用和尽可能易于理解的简单装载机。目标是从4个位置加载配置:默认值(在代码),文件,环境变量,命令行标志。该图书馆与所有这些来源一起使用。

特征

  • 简单的API。
  • 清洁和测试的代码。
  • 自动字段映射。
  • 支持不同的来源:
    • 代码中的默认值
    • 文件(JSON,YAML,TOML,DOTENV,HCL)
    • 环境变量
    • 命令行标志
  • 无依赖项(文件解析器是可选的)。
  • 能够走上配置字段的能力。

安装

GO版本1.14+

 go get github.com/cristalhq/ aconfig

例子

aconfig .Config{ // feel free to skip some steps :) // SkipDefaults: true, // SkipFiles: true, // SkipEnv: true, // SkipFlags: true, EnvPrefix: "APP", FlagPrefix: "app", Files: []string{"/var/opt/myapp/config.json", "ouch.yaml"}, FileDecoders: map[string] aconfig .FileDecoder{ // from ` aconfig yaml` submodule // see submodules in repo for more formats ".yaml": aconfig yaml.New(), }, }) // IMPORTANT: define your own flags with `flagSet` flagSet := loader.Flags() if err := loader.Load(); err != nil { panic(err) } // configuration fields will be loaded from (in order): // // 1. defaults set in structure tags (see MyConfig defenition) // 2. loaded from files `file.json` if not `ouch.yaml` will be used // 3. from corresponding environment variables with the prefix `APP_` // 4. command-line flags with the prefix `app.` if they are">
 type MyConfig struct {
	Port int `default:"1111" usage:"just give a number"`
	Auth struct {
		User string `required:"true"`
		Pass string `required:"true"`
	}
	Pass string `default:"" env:"SECRET" flag:"sec_ret"`
}

var cfg MyConfig
loader := aconfig . LoaderFor ( & cfg , aconfig . Config {
	// feel free to skip some steps :)
	// SkipDefaults: true,
	// SkipFiles:    true,
	// SkipEnv:      true,
	// SkipFlags:    true,
	EnvPrefix :       "APP" ,
	FlagPrefix :      "app" ,
	Files :           [] string { "/var/opt/myapp/config.json" , "ouch.yaml" },
	FileDecoders : map [ string ] aconfig . FileDecoder {
		// from ` aconfig yaml` submodule
		// see submodules in repo for more formats
		".yaml" : aconfig yaml . New (),
	},
})

// IMPORTANT: define your own flags with `flagSet`
flagSet := loader . Flags ()

if err := loader . Load (); err != nil {
	panic ( err )
}

// configuration fields will be loaded from (in order):
//
// 1. defaults set in structure tags (see MyConfig defenition)
// 2. loaded from files `file.json` if not `ouch.yaml` will be used
// 3. from corresponding environment variables with the prefix `APP_`
// 4. command-line flags with the prefix `app.` if they are

另请参见示例:示例_test.go。

spf13/cobra游乐场集成。

文档

查看这些文档。

执照

麻省理工学院许可证。

下载源码

通过命令行克隆项目:

git clone https://github.com/cristalhq/aconfig.git