iniflags

package
v0.0.0-...-619dff7 Latest Latest
Warning

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

Go to latest
Published: Dec 9, 2015 License: BSD-2-Clause, GPL-3.0 Imports: 13 Imported by: 0

README

Hybrid configuration library

Combine standard go flags with ini files.

Usage:


go get -u -a github.com/vharitonsky/iniflags

main.go

package main

import (
	"flag"
	...
	"github.com/vharitonsky/iniflags"
	...
)

var (
	flag1 = flag.String("flag1", "default1", "Description1")
	...
	flagN = flag.Int("flagN", 123, "DescriptionN")
)

func main() {
	iniflags.Parse()  // use instead of flag.Parse()
}

dev.ini

    # comment1
    flag1 = "val1"  # comment2

    ...
    [section]
    flagN = 4  # comment3

go run main.go -config dev.ini -flagX=foobar

Now all unset flags obtain their value from .ini file provided in -config path. If value is not found in the .ini, flag will retain its' default value.

Flag value priority:

  • value set via command-line
  • value from ini file
  • default value

Iniflags is compatible with real .ini config files with [sections] and #comments. Sections and comments are skipped during config file parsing.

Iniflags can #import another ini files. For example,

base.ini

flag1 = value1
flag2 = value2

dev.ini

#import "base.ini"
# Now flag1="value1", flag2="value2"

flag2 = foobar
# Now flag1="value1", while flag2="foobar"

Both -config path and imported ini files can be addressed via http or https links:

/path/to/app -config=https://google.com/path/to/config.ini

config.ini

# The following line will import configs from the given http link.
#import "http://google.com/path/to/config.ini"

All flags defined in the app can be dumped into stdout with ini-compatible sytax by passing -dumpflags flag to the app. The following command creates ini-file with all the flags defined in the app:

/path/to/the/app -dumpflags > initial-config.ini

Iniflags also supports two types of online config reload:

  • Via SIGHUP signal:
kill -s SIGHUP <app_pid>
  • Via -configUpdateInterval flag. The following line will re-read config every 5 seconds:
/path/to/app -config=/path/to/config.ini -configUpdateInterval=5s

Advanced usage.

package main

import (
	"flag"
	"iniflags"
	"log"
)

var listenPort = flag.Int("listenPort", 1234, "Port to listen to")

func init() {
	iniflags.OnFlagChange("listenPort", func() {
		startServerOnPort(*listenPort)
	})
}

func main() {
	// iniflags.Parse() starts the server on the -listenPort via OnFlagChange()
	// callback registered above.
	iniflags.Parse()
}

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Generation int

flags' generation number. It is modified on each flags' modification via either -configUpdateInterval or SIGHUP.

Functions

func OnFlagChange

func OnFlagChange(flagName string, callback FlagChangeCallback)

Registers the callback, which is called after the given flag value is initialized and/or changed. Flag values are initialized during iniflags.Parse() call. Flag value can be changed on config re-read after obtaining SIGHUP signal or if periodic config re-read is enabled with -configUpdateInterval flag.

Note that flags set via command-line cannot be overriden via config file modifications.

func Parse

func Parse()

Use instead of flag.Parse().

Types

type FlagChangeCallback

type FlagChangeCallback func()

Callback, which is called when the given flag is changed.

The callback may be registered for any flag via OnFlagChange().

Jump to

Keyboard shortcuts

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