gosimpleconf

package module
v0.0.4 Latest Latest
Warning

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

Go to latest
Published: Sep 28, 2022 License: BSD-2-Clause Imports: 8 Imported by: 0

README

gosimpleconf

go get gitea.wisellama.rocks/Wisellama/gosimpleconf@v0.0.4

This is a small library for parsing super simple configuration files.

It expects a file with the following format:

  • Lines with key-values pairs separated by = (e.g. foo = bar)
  • Lines that start with # are ignored (used for comments)
  • Empty and whitespace-only lines are ignore
  • Lines with data that don't have an = will cause an error.

The key-values pairs are simply parsed as strings and plopped into a map for you to do whatever your program wants with them. If you need a value to not be a string, you will have to convert the value from a string as needed for your program (e.g. using the strconv library).

Example

Here's an example config file file.conf

url = www.wisellama.rocks
number_of_widgets = 1337
pi = 3.141592653589793238462643383
environment = production
# Quotes are optional
name = Dude guy
description = "Just some dude it was"

Then to load that config file into a map:

configMap, err := gosimpleconf.Load("file.conf")

Then everything is a string. You can parse it as needed.

var piStr string = configMap["pi"]
pi, err := strconv.ParseFloat(value, 64)

To override values with cli flags, after parsing the conf file you can use these functions to also parse the flags:

flagMap := SetupFlagOverrides(configMap)
configMap = ParseFlags(configMap, flagmap)

Then you could, for example, override the url value without modifying the config file:

./program --url=newthing.wisellama.rocks

Why?

I've always seen configuration files similar to this show up in Unix-like systems and programs, but it doesn't seem to be fully standardized under a real name other than just "conf files". The closest I've seen are INI files, but those don't seem to fit the style I was looking for (they don't use # for comments and they support sections in square brackets [section]).

Instead, I just wanted the bare minimum configuration format of foo = bar on each line with # for comments. So that's what this library does.

This project looks abandoned

This library is so simple that I almost never expect to need to update it unless Go fundamentally breaks the language in the future. So while the project may eventually look like it has been abandoned, it is rather simply "complete". (gasp I know, such a rare thing in the software world).

License

This project is licensed under the 2-Clause BSD License (a permissive open source license). See License.md for the full text.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Bool added in v0.0.3

func Bool(value string) bool

Types

type ConfigMap added in v0.0.3

type ConfigMap map[string]string

func Load

func Load(filename string) (ConfigMap, error)

func ParseFlags added in v0.0.3

func ParseFlags(configMap ConfigMap, flagMap FlagMap) ConfigMap

type FlagMap added in v0.0.3

type FlagMap map[string]*string

func SetupFlagOverrides added in v0.0.3

func SetupFlagOverrides(configMap ConfigMap) FlagMap

Jump to

Keyboard shortcuts

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