Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
/confyPublic

A one stop shop for config file parsing, cli and environment variables

License

NotificationsYou must be signed in to change notification settings

NHAS/confy

Repository files navigation

confy is your one stop shop for configuration, it allows configuration from multiple sources including command-line arguments, environment variables, and configuration files in various formats (JSON,YAML,TOML).

Features

  • Multiple Configuration Sources: Populate settings fromCLI flags,environment variables, andconfig files.
  • Automatic CLI Flag and Env Variable Mapping: Fields are mapped automatically and can be renamed with theconfy:"" tag
  • Support for YAML, JSON, and TOML: Automatically detect and parse configuration file format, no added effort to switch to a new format

Installation

go get github.com/NHAS/confy

Usage

Tags

  • confy:"field_name;sensitive": Customize field names for env variables, CLI flags, and config files.
  • confy_description:"Field Description here": Set field descriptions for CLI parsing and help messages.

Basic Examples

config.json:

{"Database": {"Host":"localhost","Port":5432,"User":"dbuser","Password":"securepassword"  },"new_name":"some_value"}

config.yaml:

Database:Host:"localhost"Port:5432User:"dbuser"Password:"securepassword"new_name:"some_value"
package mainimport ("fmt""github.com/NHAS/confy")typeConfigstruct {Databasestruct {Hoststring`confy_description:"Database host address"`PortintUserstringPasswordstring}Renamedstring`confy:"new_name"`}funcmain() {// Defaults will also load from env and cli!loadedConfig,_,err:= confy.Config[Config](confy.Defaults("config","config.json"))iferr!=nil {if!errors.Is(err,flag.ErrHelp) {fmt.Println("Error loading config:",err)}return}fmt.Printf("Loaded JSON config: %+v\n",loadedConfig)yamlLoadedConfig,_,err:= confy.Config[Config](confy.Defaults("config","config.yaml"))iferr!=nil {fmt.Println("Error loading config:",err)return}fmt.Printf("Loaded YAML config: %+v\n",yamlLoadedConfig)// They're the same!}

Output

$ ./programLoaded JSON config: {Database:{Host:localhost Port:5432 User:dbuser Password:securepassword} Renamed:some_value}Loaded YAML config: {Database:{Host:localhost Port:5432 User:dbuser Password:securepassword} Renamed:some_value}$ ./program -hUsage of ./testconfy:  -config string        config file path (default"config.json")Structure options:   -Database.Host string        Database host address  -Database.Password string        A string value, Database.Password (Database.Password)  -Database.Port int        A int value, Database.Port (Database.Port)  -Database.User string        A string value, Database.User (Database.User)  -config string        config file path (default"config.json")  -new_name string        A string value, Renamed (new_name)  -struct-help        Printcommand line flags generated by confy (default true)

Environment Variables

For struct:

package mainimport ("fmt""github.com/NHAS/confy")typeConfigstruct {Serverstruct {Hoststring    }}funcmain() {populatedConfig,_,err:= confy.Config[Config](confy.FromEnvs(confy.ENVDelimiter))iferr!=nil {fmt.Println("Error loading config:",err)return}fmt.Println(populatedConfig.Server.Host)}

Expected environment variable:

export Server_Host="localhost"$ ./testlocalhost

CLI Flags only

For struct:

package mainimport ("fmt""github.com/NHAS/confy")typeConfigstruct {Databasestruct {Portint    }}funcmain() {populatedConfig,_,err:= confy.Config[Config](confy.FromCli(confy.CLIDelimiter))iferr!=nil {fmt.Println("Error loading config:",err)return}fmt.Println(populatedConfig.Database.Port)}

Expected CLI flag:

$ ./app -Database.Port=54325432

Logging

Confy has logging capabilities using theslog package. Use theWithLogLevel option to adjust verbosity or disable logging.

Configuration Options

Confy offers a variety of options for configuring your application's settings.

OptionDescription
Defaults(...)Loads configurations in the order: config file -> environment variables -> CLI flags. This sets a non-strict parsing mode for unknown fields in the config file.
FromConfigFile(...)Load configuration from a file. SupportsYAML,JSON, andTOML.
FromConfigBytes(...)Load configuration from raw bytes, ideal for embedding configuration in code.
FromConfigURL(...)Load configuration from URL. SupportsYAML,JSON, andTOML, use extension or content type to specify type when using auto keyword
FromConfigFileFlagPath(...)Load configuration from file with filepath specified as cli flag
WithStrictParsing(...)Parse config files in a strict way, do not allow unknown fields
FromCli(...)Load configuration from CLI flags. Set a delimiter for nested struct parsing.
WithLogLevel(...)Set logging level to control output verbosity. Useful for debugging.
WithCliTransform(...)Takes a function to run against the generated CLI flag name, allows you to modify the flag name
WithEnvTransform(...)Takes a function to run against the generated ENV variable name, allows you to modify the ENV name

Notes

  • Complex structures must implementencoding.TextUnmarshaler andencoding.TextMarshaler for CLI/ENV parsing.
  • CLI flags and environment variables use the delimiters (. for CLI,_ for ENV by default) when handling nested fields.

About

A one stop shop for config file parsing, cli and environment variables

Topics

Resources

License

Stars

Watchers

Forks

Languages


[8]ページ先頭

©2009-2025 Movatter.jp