goconf

package module
v0.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 9, 2023 License: Unlicense Imports: 15 Imported by: 3

README

[Archived] This repository has been archived,See https://github.com/sandwich-go/xconf instead.

goconf 

Build Status Go Walker GoDoc Go Report CardSourcegraph

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

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.

  HTTPAddress string

Usage

load multiple config files
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:

[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
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:

[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
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GenTemplate

func GenTemplate(opts interface{}, fname string) error

GenTemplate Gen template conf file base on the given struct and save the conf to file.

func MustResolve

func MustResolve(opts interface{}, files ...string)

MustResolve given files, panic if fail

func Resolve

func Resolve(opts interface{}, files ...string) error

Resolve given files, return error if fail

func SetGlobalLogger

func SetGlobalLogger(lf func(string))

SetGlobalLogger set the global logger func, if nil, lib will keep silent

Types

type AutoOptions

type AutoOptions struct {
	AutoConfFiles string `flag:"_auto_conf_files_"`
}

AutoOptions provide flag: _auto_conf_files_

type Config

type Config struct {
	// contains filtered or unexported fields
}

Config represents a configuration loader

func New

func New(name string) *Config

New Config with name and option struct

func (*Config) GenTemplate

func (c *Config) GenTemplate(opts interface{}, fn string) error

GenTemplate Gen template conf file base on the given struct and save the conf to file.

func (*Config) MustResolve

func (c *Config) MustResolve(opts interface{}, files []string)

MustResolve given files, panic if fail

func (*Config) Resolve

func (c *Config) Resolve(opts interface{}, files []string) error

Resolve given files, return error if fail

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL