INI contents parser by Golang, INI config data management.
- Easy to use(get:
IntInt64BoolStringStringMap..., set:Set) - Support multi file, data load
- Support for decode data to struct
- Support for encode data to INI content
- Comments, environment variables, etc. are reverted
- Support data override merge
- Support parse ENV variable
- Support comments start with
;#, multi line comments/* .. */ - Support multi line value with
"""or''' - Complete unit test(coverage > 90%)
- Support variable reference, default compatible with Python's configParser format
%(VAR)s
Package parser is a Parser for parse INI format content to golang data
Package dotenv that supports importing ENV data from files (eg .env)
- filename support simple glob pattern. eg:
.env.*,*.env
If you want more support for file content formats, recommended use gookit/config
- gookit/config - Support multi formats:
JSON(default),INI,YAML,TOML,HCL
go get github.com/gookit/ini/v2- example data(
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)spackage main import ( "github.com/gookit/ini/v2" ) // go run ./examples/demo.go func main() { // config, err := ini.LoadFiles("testdata/tesdt.ini") // LoadExists will ignore not exists file err := ini.LoadExists("testdata/test.ini", "not-exist.ini") if err != nil { panic(err) } // load more, will override prev data by key err = ini.LoadStrings(` age = 100 [sec1] newK = newVal some = change val `) // fmt.Printf("%v\n", config.Data()) }- Get integer
age := ini.Int("age") fmt.Print(age) // 100- Get bool
val := ini.Bool("debug") fmt.Print(val) // true- Get string
name := ini.String("name") fmt.Print(name) // inhere- Get section data(string map)
val := ini.StringMap("sec1") fmt.Println(val) // map[string]string{"key":"val0", "some":"change val", "stuff":"things", "newK":"newVal"}- Value is ENV var
value := ini.String("shell") fmt.Printf("%q", value) // "/bin/zsh"- Get value by key path
value := ini.String("sec1.key") fmt.Print(value) // val0- Use var refer
value := ini.String("sec1.varRef") fmt.Printf("%q", value) // "val in default section"- Set new value
// set value ini.Set("name", "new name") name = ini.String("name") fmt.Printf("%q", name) // "new name"type User struct { Name string Age int } user := &User{} ini.MapStruct(ini.DefSection(), user) dump.P(user)Special, mapping all data:
ini.MapStruct("", ptr)[portal] url = http://%(host)s:%(port)s/api host = localhost port = 8080If variable resolution is enabled,will parse %(host)s and replace it:
cfg := ini.New() // enable ParseVar cfg.WithOptions(ini.ParseVar) fmt.Print(cfg.MustString("portal.url")) // OUT: // http://localhost:8080/api type Options struct { // set to read-only mode. default False Readonly bool // parse ENV var name. default True ParseEnv bool // parse variable reference "%(varName)s". default False ParseVar bool // var left open char. default "%(" VarOpen string // var right close char. default ")s" VarClose string // ignore key name case. default False IgnoreCase bool // default section name. default "__default" DefSection string // sep char for split key path. default ".", use like "section.subKey" SectionSep string }Setting options for default instance:
ini.WithOptions(ini.ParseEnv,ini.ParseVar)Setting options with new instance:
cfg := ini.New() cfg.WithOptions(ini.ParseEnv, ini.ParseVar, func (opts *Options) { opts.SectionSep = ":" opts.DefSection = "default" })Package dotenv that supports importing data from files (eg .env) to ENV
NOTE: filename support simple glob pattern. eg: ".env.", ".env"
err := dotenv.Load("./", ".env") // err := dotenv.LoadExists("./", ".env") val := dotenv.Get("ENV_KEY") // Or use // val := os.Getenv("ENV_KEY") // get int value intVal := dotenv.Int("LOG_LEVEL") // with default value val := dotenv.Get("ENV_KEY", "default value")- go tests with cover
go test ./... -cover- run lint by GoLint
golint ./...- gookit/ini Go config management, use INI files
- gookit/rux Simple and fast request router for golang HTTP
- gookit/gcli Build CLI application, tool library, running CLI commands
- gookit/slog Lightweight, easy to extend, configurable logging library written in Go
- gookit/color A command-line color library with true color support, universal API methods and Windows support
- gookit/event Lightweight event manager and dispatcher implements by Go
- gookit/cache Generic cache use and cache manager for golang. support File, Memory, Redis, Memcached.
- gookit/config Go config management. support JSON, YAML, TOML, INI, HCL, ENV and Flags
- gookit/filter Provide filtering, sanitizing, and conversion of golang data
- gookit/validate Use for data validation and filtering. support Map, Struct, Form data
- gookit/goutil Some utils for the Go: string, array/slice, map, format, cli, env, filesystem, test and more
- More, please see https://github.com/gookit
- go-ini/ini ini parser and config manage
- dombenson/go-ini ini parser and config manage
MIT