Popularity
3.7
Declining
Activity
2.8
Declining
100
4
2
Programming language: Go
License: MIT License
Tags:
Configuration
Latest version: v1.3.0
envh alternatives and similar packages
Based on the "Configuration" category.
Alternatively, view envh alternatives based on common mentions on social networks and blogs.
-
koanf
Simple, extremely lightweight, extensible, configuration management library for Go. Supports JSON, TOML, YAML, env, command line, file, S3 etc. Alternative to viper. -
konfig
Composable, observable and performant config handling for Go for the distributed processing era -
gookit/config
📝 Go configuration manage(load,get,set,export). support JSON, YAML, TOML, Properties, INI, HCL, ENV and Flags. Multi file load, data override merge, parse ENV var. Go应用配置加载管理,支持多种格式,多文件加载,远程文件加载,支持数据合并,解析环境变量名 -
gcfg
read INI-style configuration files into Go structs; supports user-defined types and subsections -
goConfig
DISCONTINUED. goconfig uses a struct as input and populates the fields of this struct with parameters from command line, environment variables and configuration file. -
joshbetz/config
🛠 A configuration library for Go that parses environment variables, JSON files, and reloads automatically on SIGHUP. -
Zero Effort Configuration
Zero-effort, concise configuration management that avoids boilerplate and repetitive actions. -
configuro
An opinionated configuration loading framework for Containerized and Cloud-Native applications. -
hocon
go implementation of lightbend's HOCON configuration library https://github.com/lightbend/config -
configure
Configure is a Go package that gives you easy configuration of your project through redundancy -
Genv
Genv is a library for Go (golang) that makes it easy to read and use environment variables in your projects. It also allows environment variables to be loaded from the .env file. -
swap
Instantiate/configure structs recursively, based on build environment. (YAML, TOML, JSON and env).
InfluxDB – Built for High-Performance Time Series Workloads
InfluxDB 3 OSS is now GA. Transform, enrich, and act on time series data directly in the database. Automate critical tasks and eliminate the need to move data externally. Download now.
Promo
www.influxdata.com

Do you think we are missing an alternative of envh or a related project?
Popular Comparisons
README
Envh

This library is made up of two parts :
- Env object : it wraps your environments variables in an object and provides convenient helpers.
- Env tree object : it manages environment variables through a tree structure to store a config the same way as in a yaml file or whatever format allows to store a config hierarchically
Install
go get github.com/antham/envh
How it works
Check the godoc, there are many examples provided.
Example with a tree dumped in a config struct
package envh
import (
"encoding/json"
"fmt"
"os"
"strings"
)
type CONFIG2 struct {
DB struct {
USERNAME string
PASSWORD string
HOST string
NAME string
PORT int
URL string
USAGELIMIT float32
}
MAILER struct {
HOST string
USERNAME string
PASSWORD string
ENABLED bool
}
MAP map[string]string
}
func (c *CONFIG2) Walk(tree *EnvTree, keyChain []string) (bool, error) {
if setter, ok := map[string]func(*EnvTree, []string) error{
"CONFIG2_DB_URL": c.setURL,
"CONFIG2_MAP": c.setMap,
}[strings.Join(keyChain, "_")]; ok {
return true, setter(tree, keyChain)
}
return false, nil
}
func (c *CONFIG2) setMap(tree *EnvTree, keyChain []string) error {
datas := map[string]string{}
keys, err := tree.FindChildrenKeys(keyChain...)
if err != nil {
return err
}
for _, key := range keys {
value, err := tree.FindString(append(keyChain, key)...)
if err != nil {
return err
}
datas[key] = value
}
c.MAP = datas
return nil
}
func (c *CONFIG2) setURL(tree *EnvTree, keyChain []string) error {
datas := map[string]string{}
for _, key := range []string{"USERNAME", "PASSWORD", "HOST", "NAME"} {
value, err := tree.FindString("CONFIG2", "DB", key)
if err != nil {
return err
}
datas[key] = value
}
port, err := tree.FindInt("CONFIG2", "DB", "PORT")
if err != nil {
return err
}
c.DB.URL = fmt.Sprintf("jdbc:mysql://%s:%d/%s?user=%s&password=%s", datas["HOST"], port, datas["NAME"], datas["USERNAME"], datas["PASSWORD"])
return nil
}
func ExampleStructWalker_customFieldSet() {
os.Clearenv()
setEnv("CONFIG2_DB_USERNAME", "foo")
setEnv("CONFIG2_DB_PASSWORD", "bar")
setEnv("CONFIG2_DB_HOST", "localhost")
setEnv("CONFIG2_DB_NAME", "my-db")
setEnv("CONFIG2_DB_PORT", "3306")
setEnv("CONFIG2_DB_USAGELIMIT", "95.6")
setEnv("CONFIG2_MAILER_HOST", "127.0.0.1")
setEnv("CONFIG2_MAILER_USERNAME", "foo")
setEnv("CONFIG2_MAILER_PASSWORD", "bar")
setEnv("CONFIG2_MAILER_ENABLED", "true")
setEnv("CONFIG2_MAP_KEY1", "value1")
setEnv("CONFIG2_MAP_KEY2", "value2")
setEnv("CONFIG2_MAP_KEY3", "value3")
env, err := NewEnvTree("^CONFIG2", "_")
if err != nil {
return
}
s := CONFIG2{}
err = env.PopulateStruct(&s)
if err != nil {
return
}
b, err := json.Marshal(s)
if err != nil {
return
}
fmt.Println(string(b))
// Output:
// {"DB":{"USERNAME":"foo","PASSWORD":"bar","HOST":"localhost","NAME":"my-db","PORT":3306,"URL":"jdbc:mysql://localhost:3306/my-db?user=foo\u0026password=bar","USAGELIMIT":95.6},"MAILER":{"HOST":"127.0.0.1","USERNAME":"foo","PASSWORD":"bar","ENABLED":true},"MAP":{"KEY1":"value1","KEY2":"value2","KEY3":"value3"}}
}