https://github.com/timestee/goconf
Configuration loader in Go
https://github.com/timestee/goconf
command-line config configuration-files configuration-loader flag go goconf golang json toml
Last synced: about 2 months ago
JSON representation
Configuration loader in Go
- Host: GitHub
- URL: https://github.com/timestee/goconf
- Owner: timestee
- License: unlicense
- Created: 2017-04-27T09:08:18.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2023-03-09T12:14:08.000Z (about 3 years ago)
- Last Synced: 2026-01-14T14:00:53.679Z (5 months ago)
- Topics: command-line, config, configuration-files, configuration-loader, flag, go, goconf, golang, json, toml
- Language: Go
- Size: 53.7 KB
- Stars: 24
- Watchers: 5
- Forks: 7
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[Archived] This repository has been archived,See https://github.com/sandwich-go/xconf instead.
# goconf
[](https://travis-ci.org/timestee/goconf)
[](https://gowalker.org/github.com/timestee/goconf)
[](https://godoc.org/github.com/timestee/goconf)
[](https://goreportcard.com/report/github.com/timestee/goconf)[](https://sourcegraph.com/github.com/timestee/goconf?badge)
## Overview
* Read configuration automatically based on the given struct's field name.
* Load configuration from multiple sources
* file inherit
Values are resolved with the following priorities (lowest to highest):
1. Options struct default value
2. Flags default value
3. Config file value, TOML or JSON file
4. OS Env
5. Command line flag
## About field tags in structs
```go
type TestOptions struct {
Hosts []string `flag:"hosts" cfg:"hosts" default:"127.0.0.0,127.0.0.1"`
}
```
* `flag` is the name passed from the command line.
* `cfg` is the name used in config files.
* `default` is the default value
If do not define `flag` tag, `flag` will be snake case of the fild name.
If do not define `cfg` tag, `cfg` value will be `flag` value.
For example, flag and cfg will be http_address.
```go
HTTPAddress string
```
## Usage
### load multiple config files
```go
package main
import "github.com/timestee/goconf"
type TestOptions struct {
goconf.AutoOptions
HTTPAddress string `default:"0.0.0.0:0000"`
Hosts []string `flag:"hosts" cfg:"hosts" default:"127.0.0.0,127.0.0.1"`
LogLevel int `default:"3"`
BoolVar bool `default:"false"`
}
func main() {
ops := &TestOptions{}
goconf.MustResolve(ops,"conf_1.toml","conf_2.toml")
}
```
`go run main.go --log_level=1`
The output will be:
```plain
[Config] auto flag succ, name: _auto_conf_files_ val:
[Config] auto flag succ, name: http_address val: 0.0.0.0:0000
[Config] auto flag fail, name: hosts val: 127.0.0.0,127.0.0.1 err: type not support []string
[Config] auto flag succ, name: log_level val: 3
[Config] auto flag succ, name: bool_var val: false
[Config] file: [conf_1.toml conf_2.toml]
[Config] load: conf_1.toml
[Config] load: conf_2.toml
[Config]
{
"AutoConfFiles": "",
"HTTPAddress": "127.0.0.1:2",
"Hosts": [
"10.0.61.29",
"10.0.61.30",
"10.0.61.31",
"10.0.61.32"
],
"LogLevel": 1,
"BoolVar": true
}
```
### load config file with file inherited
```go
package main
import "github.com/timestee/goconf"
type TestOptions struct {
goconf.AutoOptions
HTTPAddress string `default:"0.0.0.0:0000"`
Hosts []string `flag:"hosts" cfg:"hosts" default:"127.0.0.0,127.0.0.1"`
LogLevel int `default:"3"`
BoolVar bool `default:"false"`
}
func main() {
ops := &TestOptions{}
// conf_3 inherit from conf_1 and conf_2
goconf.MustResolve(ops,"conf_3.toml")
}
```
`go run main.go --http_address=0.0.0.0:1111111`
The output will be:
```plain
[Config] auto flag succ, name: _auto_conf_files_ val:
[Config] auto flag succ, name: http_address val: 0.0.0.0:0000
[Config] auto flag fail, name: hosts val: 127.0.0.0,127.0.0.1 err: type not support []string
[Config] auto flag succ, name: log_level val: 3
[Config] auto flag succ, name: bool_var val: false
[Config] file: [conf_3.toml]
[Config] load: ./conf_1.toml
[Config] load: ./conf_2.toml
[Config] load: conf_3.toml
[Config]
{
"AutoConfFiles": "",
"HTTPAddress": "0.0.0.0:1111111",
"Hosts": [
"10.0.61.29",
"10.0.61.30",
"10.0.61.31",
"10.0.61.32",
"10.0.61.33"
],
"LogLevel": 2,
"BoolVar": true
}
```