Skip to content

josemukorivo/config

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Efficient Configuration and Environment Variable Management for Golang

License Go Report Card GoDoc

Config is a lightweight and flexible Golang package designed to simplify configuration management in your applications. It seamlessly handles configuration files and environment variables, providing a unified interface for accessing and managing your application's settings.

Features

  • Simple and easy to use
  • Supports environment variables
  • Supports configuration files
  • Supports nested configuration
  • Supports default values
  • Supports validation
  • Supports custom configuration sources

Installation

go get -u github.com/josemukorivo/config

Usage

Configuration File

main.go

package main

import (
	"fmt"
	"log"

	"github.com/josemukorivo/config"
)

type Config struct {
	Host string
	Port int
}

func main() {
	var cfg Config

	// Load configuration from environment variables file
	if err := config.Parse("app", &cfg, ".env.local"); err != nil {
		log.Fatal(err)
	}

	fmt.Println(cfg.Host)
	fmt.Println(cfg.Port)
}

.env.local

APP_HOST=localhost
APP_PORT=8080

Default Values

package main

import (
	"fmt"
	"log"

	"github.com/josemukorivo/config"
)

type Config struct {
	Host string `default:"localhost"`
	Port int    `default:"8080"`
}

func main() {
	var cfg Config

	// Looks for a file named .env by default
	if err := config.Parse("app", &cfg); err != nil {
		log.Fatal(err)
	}

	fmt.Println(cfg.Host)
	fmt.Println(cfg.Port)
}

Nested Configuration

package main

import (
	"fmt"
	"log"

	"github.com/josemukorivo/config"
)

type Config struct {
	Host string
	Port int
	DB   struct {
		Host     string
		Port     int
		Username string
		Password string
	}
}

func main() {
	var cfg Config

	if err := config.Parse("app", &cfg); err != nil {
		log.Fatal(err)
	}

	fmt.Println(cfg.Host)
	fmt.Println(cfg.Port)
	fmt.Println(cfg.DB.Host)
	fmt.Println(cfg.DB.Port)
	fmt.Println(cfg.DB.Username)
	fmt.Println(cfg.DB.Password)
}

Validation

package main

import (
	"fmt"
	"log"

	"github.com/josemukorivo/config"
)

type Config struct {
	Host string `required:"true"`
	Port int    `required:"true"`
}


func main() {
	var cfg Config

	if err := config.Parse("app", &cfg); err != nil {
		log.Fatal(err) // Missing required configuration parameters if Host or Port are not provided in the environment
	}

	fmt.Println(cfg.Host)
	fmt.Println(cfg.Port)
}

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

Configuration and Environment Variable Management for Golang

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages