envs

package module
v0.0.0-...-6fa2422 Latest Latest
Warning

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

Go to latest
Published: Feb 5, 2024 License: MIT Imports: 8 Imported by: 0

README

envs

Flags to environment variables for Go projects

Installation

go get github.com/alex-ant/envs

About the project

envs allows Go projects to read environment variables by setting the corresponding flags. Consider the execution example below:

go run main.go -api-port 8080

This program expects the api-port flag of the int type.

Importing the envs library, the mentioned program will automatically determine the API_PORT environment variable which makes it convenient to run it in an environment like Docker Compose.

The library reads all the flags expected by the binary replacing dashes (-) with underscores (_), capitalizing the letters and looking for the respective environment variables whose values, if set, are set to flags' values.

Usage example
package main

import (
	"flag"
	"log"

	"github.com/alex-ant/envs"
)

var (
	APIPort = flag.Int("api-port", 30303, "HTTP API port number")

	PgHost    = flag.String("pg-host", "127.0.0.1", "PostgreSQL host")
	PgPort    = flag.Int("pg-port", 5432, "PostgreSQL port")
	PgUser    = flag.String("pg-user", "postgres", "PostgreSQL user")
	PgPass    = flag.String("pg-pass", "postgres", "PostgreSQL password")
	PgDB      = flag.String("pg-db", "events", "PostgreSQL database name")
	PgTimeout = flag.Int("pg-timeout", 30, "PostgreSQL connection timeout in seconds")
)

func main() {
	// Parse flags.
	flag.Parse()

	// Determine and read environment variables.
	flagsErr := envs.GetAllFlags()
	if flagsErr != nil {
		log.Fatal(flagsErr)
	}

	// At this point the application has overwritten its flags' values with the
	// values of the following environment variables if those have been provided:
	// API_PORT, PG_DB, PG_HOST, PG_PASS, PG_PORT, PG_TIMEOUT, PG_USER.
}
Printing all expected flags and environment variables

After importing the envs library, a program can be run with -envs flag which will force it to print the table of expected flags, the corresponding environment variables, default values and exit at once.

Example or running the program described in "Usage example" section:

[alex.ant@localhost tmp]$ PG_DB=my-db go run env-example.go -envs
     FLAG    | ENVIRONMENT VAR | DEFAULT VALUE | CURRENT VALUE |          DESCRIPTION            
+------------+-----------------+---------------+---------------+--------------------------------+
  api-port   | API_PORT        | 30303         | 30303         | HTTP API port number            
  pg-db      | PG_DB           | events        | my-db         | PostgreSQL database name        
  pg-host    | PG_HOST         | 127.0.0.1     | 127.0.0.1     | PostgreSQL host                 
  pg-pass    | PG_PASS         | postgres      | postgres      | PostgreSQL password             
  pg-port    | PG_PORT         | 5432          | 5432          | PostgreSQL port                 
  pg-timeout | PG_TIMEOUT      | 30            | 30            | PostgreSQL connection timeout   
             |                 |               |               | in seconds                      
  pg-user    | PG_USER         | postgres      | postgres      | PostgreSQL user                 

This action will also produce the envs.md file with the same data formatted as markdown which can be added to project's README in the following form:

|Flag|Env. variable|Default value|Description|
|:----|:----|:---|:---|
|api-port|API_PORT|30303|HTTP API port number|
|pg-db|PG_DB|events|PostgreSQL database name|
|pg-host|PG_HOST|127.0.0.1|PostgreSQL host|
|pg-pass|PG_PASS|postgres|PostgreSQL password|
|pg-port|PG_PORT|5432|PostgreSQL port|
|pg-timeout|PG_TIMEOUT|30|PostgreSQL connection timeout in seconds|
|pg-user|PG_USER|postgres|PostgreSQL user|

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetAllFlags

func GetAllFlags() error

GetAllFlags defines corresponding environment variables for each flag and returns a table representing all the application flags and environment variables.

Types

This section is empty.

Jump to

Keyboard shortcuts

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