Documentation
¶
Index ¶
- Constants
- func Arch() string
- func Dump(vs ...any)
- func Get(key, fallback string) string
- func GetAppEnv() string
- func GetBool(key, fallback string) bool
- func GetDuration(key, fallback string) time.Duration
- func GetEnum(key, fallback string, allowed []string) string
- func GetFloat(key, fallback string) float64
- func GetInt(key, fallback string) int
- func GetInt64(key, fallback string) int64
- func GetMap(key, fallback string) map[string]string
- func GetSlice(key, fallback string) []string
- func GetUint(key, fallback string) uint
- func GetUint64(key, fallback string) uint64
- func IsAppEnv(envs ...string) bool
- func IsAppEnvLocal() bool
- func IsAppEnvLocalOrStaging() bool
- func IsAppEnvProduction() bool
- func IsAppEnvStaging() bool
- func IsAppEnvTesting() bool
- func IsAppEnvTestingOrLocal() bool
- func IsBSD() bool
- func IsContainer() bool
- func IsContainerOS() bool
- func IsDocker() bool
- func IsDockerHost() bool
- func IsDockerInDocker() bool
- func IsEnvLoaded() bool
- func IsHostEnvironment() bool
- func IsKubernetes() bool
- func IsLinux() bool
- func IsMac() bool
- func IsUnix() bool
- func IsWindows() bool
- func LoadEnvFileIfExists() error
- func MustGet(key string) string
- func MustGetBool(key string) bool
- func MustGetInt(key string) int
- func OS() string
- func SetAppEnv(appEnv string) error
- func SetAppEnvLocal() error
- func SetAppEnvProduction() error
- func SetAppEnvStaging() error
- func SetAppEnvTesting() error
Constants ¶
const ( Testing = "testing" Local = "local" Staging = "staging" Production = "production" )
environment helpers
const MaxDirectorySeekLevels int = 10
MaxDirectorySeekLevels is the number of directory levels a .env file needs to be searched in
Variables ¶
This section is empty.
Functions ¶
func Arch ¶
func Arch() string
Arch returns the CPU architecture the binary is running on. @group Runtime @behavior readonly
Mirrors runtime.GOARCH; tests may override via the internal shim.
Example: print GOARCH
env.Dump(env.Arch()) // #string "amd64" // #string "arm64"
func Dump ¶
func Dump(vs ...any)
Dump is a convenience function that calls godump.Dump. @group Debugging @behavior readonly
Example: integers
nums := []int{1, 2, 3}
env.Dump(nums)
// #[]int [
// 0 => 1 #int
// 1 => 2 #int
// 2 => 3 #int
// ]
Example: multiple values
env.Dump("status", map[string]int{"ok": 1, "fail": 0})
// #string "status"
// #map[string]int [
// "fail" => 0 #int
// "ok" => 1 #int
// ]
func Get ¶
Get returns the environment variable for key or fallback when empty. @group Typed getters @behavior readonly
Examples use github.com/goforj/godump to illustrate the concrete type.
Example: fallback when unset
os.Unsetenv("DB_HOST")
host := env.Get("DB_HOST", "localhost")
env.Dump(host)
// #string "localhost"
Example: prefer existing value
_ = os.Setenv("DB_HOST", "db.internal")
host = env.Get("DB_HOST", "localhost")
env.Dump(host)
// #string "db.internal"
func GetAppEnv ¶
func GetAppEnv() string
GetAppEnv returns the current APP_ENV (empty string if unset). @group Application environment @behavior readonly
Example: simple retrieval
_ = os.Setenv("APP_ENV", "staging")
env.Dump(env.GetAppEnv())
// #string "staging"
func GetBool ¶
GetBool parses a boolean from an environment variable or fallback string. @group Typed getters @behavior readonly
Accepted values: true/false, 1/0, t/f (case-insensitive). Invalid entries fall back.
Example: numeric truthy
_ = os.Setenv("DEBUG", "1")
debug := env.GetBool("DEBUG", "false")
env.Dump(debug)
// #bool true
Example: fallback string
os.Unsetenv("DEBUG")
debug = env.GetBool("DEBUG", "false")
env.Dump(debug)
// #bool false
func GetDuration ¶
GetDuration parses a Go duration string (e.g. "5s", "10m", "1h"). @group Typed getters @behavior readonly
Example: override request timeout
_ = os.Setenv("HTTP_TIMEOUT", "30s")
timeout := env.GetDuration("HTTP_TIMEOUT", "5s")
env.Dump(timeout)
// #time.Duration 30s
Example: fallback when unset
os.Unsetenv("HTTP_TIMEOUT")
timeout = env.GetDuration("HTTP_TIMEOUT", "5s")
env.Dump(timeout)
// #time.Duration 5s
func GetEnum ¶
GetEnum ensures the environment variable's value is in the allowed list. @group Typed getters @behavior readonly
Returns fallback when the environment value is not in the allowed slice.
Example: accept only staged environments
_ = os.Setenv("APP_ENV", "production")
appEnv := env.GetEnum("APP_ENV", "local", []string{"local", "staging", "production"})
env.Dump(appEnv)
// #string "production"
Example: fallback when unset
os.Unsetenv("APP_ENV")
appEnv = env.GetEnum("APP_ENV", "local", []string{"local", "staging", "production"})
env.Dump(appEnv)
// #string "local"
func GetFloat ¶
GetFloat parses a float64 from an environment variable or fallback string. @group Typed getters @behavior readonly
Example: override threshold
_ = os.Setenv("THRESHOLD", "0.82")
threshold := env.GetFloat("THRESHOLD", "0.75")
env.Dump(threshold)
// #float64 0.82
Example: fallback with decimal string
os.Unsetenv("THRESHOLD")
threshold = env.GetFloat("THRESHOLD", "0.75")
env.Dump(threshold)
// #float64 0.75
func GetInt ¶
GetInt parses an int from an environment variable or fallback string. @group Typed getters @behavior readonly
Example: fallback used
os.Unsetenv("PORT")
port := env.GetInt("PORT", "3000")
env.Dump(port)
// #int 3000
Example: env overrides fallback
_ = os.Setenv("PORT", "8080")
port = env.GetInt("PORT", "3000")
env.Dump(port)
// #int 8080
func GetInt64 ¶
GetInt64 parses an int64 from an environment variable or fallback string. @group Typed getters @behavior readonly
Example: parse large numbers safely
_ = os.Setenv("MAX_SIZE", "1048576")
size := env.GetInt64("MAX_SIZE", "512")
env.Dump(size)
// #int64 1048576
Example: fallback when unset
os.Unsetenv("MAX_SIZE")
size = env.GetInt64("MAX_SIZE", "512")
env.Dump(size)
// #int64 512
func GetMap ¶
GetMap parses key=value pairs separated by commas into a map. @group Typed getters @behavior readonly
Example: parse throttling config
_ = os.Setenv("LIMITS", "read=10, write=5, burst=20")
limits := env.GetMap("LIMITS", "")
env.Dump(limits)
// #map[string]string [
// "burst" => "20" #string
// "read" => "10" #string
// "write" => "5" #string
// ]
Example: returns empty map when unset or blank
os.Unsetenv("LIMITS")
limits = env.GetMap("LIMITS", "")
env.Dump(limits)
// #map[string]string []
func GetSlice ¶
GetSlice splits a comma-separated string into a []string with trimming. @group Typed getters @behavior readonly
Example: trimmed addresses
_ = os.Setenv("PEERS", "10.0.0.1, 10.0.0.2")
peers := env.GetSlice("PEERS", "")
env.Dump(peers)
// #[]string [
// 0 => "10.0.0.1" #string
// 1 => "10.0.0.2" #string
// ]
Example: empty becomes empty slice
os.Unsetenv("PEERS")
peers = env.GetSlice("PEERS", "")
env.Dump(peers)
// #[]string []
func GetUint ¶
GetUint parses a uint from an environment variable or fallback string. @group Typed getters @behavior readonly
Example: defaults to fallback when missing
os.Unsetenv("WORKERS")
workers := env.GetUint("WORKERS", "4")
env.Dump(workers)
// #uint 4
Example: uses provided unsigned value
_ = os.Setenv("WORKERS", "16")
workers = env.GetUint("WORKERS", "4")
env.Dump(workers)
// #uint 16
func GetUint64 ¶
GetUint64 parses a uint64 from an environment variable or fallback string. @group Typed getters @behavior readonly
Example: high range values
_ = os.Setenv("MAX_ITEMS", "5000")
maxItems := env.GetUint64("MAX_ITEMS", "100")
env.Dump(maxItems)
// #uint64 5000
Example: fallback when unset
os.Unsetenv("MAX_ITEMS")
maxItems = env.GetUint64("MAX_ITEMS", "100")
env.Dump(maxItems)
// #uint64 100
func IsAppEnv ¶
IsAppEnv checks if APP_ENV matches any of the provided environments. @group Application environment @behavior readonly
Example: match any allowed environment
_ = os.Setenv("APP_ENV", "staging")
env.Dump(env.IsAppEnv(env.Production, env.Staging))
// #bool true
Example: unmatched environment
_ = os.Setenv("APP_ENV", "local")
env.Dump(env.IsAppEnv(env.Production, env.Staging))
// #bool false
func IsAppEnvLocal ¶
func IsAppEnvLocal() bool
IsAppEnvLocal checks if APP_ENV is "local". @group Application environment @behavior readonly
Example:
_ = os.Setenv("APP_ENV", env.Local)
env.Dump(env.IsAppEnvLocal())
// #bool true
func IsAppEnvLocalOrStaging ¶
func IsAppEnvLocalOrStaging() bool
IsAppEnvLocalOrStaging checks if APP_ENV is either "local" or "staging". @group Application environment @behavior readonly
Example:
_ = os.Setenv("APP_ENV", env.Local)
env.Dump(env.IsAppEnvLocalOrStaging())
// #bool true
func IsAppEnvProduction ¶
func IsAppEnvProduction() bool
IsAppEnvProduction checks if APP_ENV is "production". @group Application environment @behavior readonly
Example:
_ = os.Setenv("APP_ENV", env.Production)
env.Dump(env.IsAppEnvProduction())
// #bool true
func IsAppEnvStaging ¶
func IsAppEnvStaging() bool
IsAppEnvStaging checks if APP_ENV is "staging". @group Application environment @behavior readonly
Example:
_ = os.Setenv("APP_ENV", env.Staging)
env.Dump(env.IsAppEnvStaging())
// #bool true
func IsAppEnvTesting ¶
func IsAppEnvTesting() bool
IsAppEnvTesting reports whether APP_ENV is "testing" or the process looks like `go test`. @group Application environment @behavior readonly
Checks APP_ENV, the -test.v flag, and arguments ending with ".test" or "-test.run".
Example: APP_ENV explicitly testing
_ = os.Setenv("APP_ENV", env.Testing)
env.Dump(env.IsAppEnvTesting())
// #bool true
Example: no test markers
_ = os.Unsetenv("APP_ENV")
env.Dump(env.IsAppEnvTesting())
// #bool false (outside of test binaries)
func IsAppEnvTestingOrLocal ¶
func IsAppEnvTestingOrLocal() bool
IsAppEnvTestingOrLocal checks if APP_ENV is "testing" or "local". @group Application environment @behavior readonly
Example:
_ = os.Setenv("APP_ENV", env.Testing)
env.Dump(env.IsAppEnvTestingOrLocal())
// #bool true
func IsBSD ¶
func IsBSD() bool
IsBSD reports whether the runtime OS is any BSD variant. @group Runtime @behavior readonly
BSD identifiers include: freebsd, openbsd, netbsd, dragonfly.
Example:
env.Dump(env.IsBSD()) // #bool true (on BSD variants) // #bool false (elsewhere)
func IsContainer ¶
func IsContainer() bool
IsContainer detects common container runtimes (Docker, containerd, Kubernetes, Podman). @group Container detection @behavior readonly
Example: host vs container
env.Dump(env.IsContainer()) // #bool true (inside most containers) // #bool false (on bare-metal/VM hosts)
func IsContainerOS ¶
func IsContainerOS() bool
IsContainerOS reports whether this OS is *typically* used as a container base. @group Runtime @behavior readonly
This does NOT indicate you are inside a container — only that the OS is usually the base for container images (currently Linux).
Example:
env.Dump(env.IsContainerOS()) // #bool true (on Linux) // #bool false (on macOS/Windows)
func IsDocker ¶
func IsDocker() bool
IsDocker reports whether the current process is running in a Docker container. @group Container detection @behavior readonly
Heuristics: presence of /.dockerenv or Docker-related cgroup markers.
Example: typical host
env.Dump(env.IsDocker()) // #bool false (unless inside Docker)
func IsDockerHost ¶
func IsDockerHost() bool
IsDockerHost reports whether this container behaves like a Docker host. @group Container detection @behavior readonly
True when docker.sock is available but container-level cgroups are absent.
Example:
env.Dump(env.IsDockerHost()) // #bool true (when acting as Docker host) // #bool false (for normal containers/hosts)
func IsDockerInDocker ¶
func IsDockerInDocker() bool
IsDockerInDocker reports whether we are inside a Docker-in-Docker environment. @group Container detection @behavior readonly
Requires /.dockerenv to be present and a docker.sock exposed to the container.
Example:
env.Dump(env.IsDockerInDocker()) // #bool true (inside DinD containers) // #bool false (on hosts or non-DinD containers)
func IsEnvLoaded ¶
func IsEnvLoaded() bool
IsEnvLoaded reports whether LoadEnvFileIfExists was executed in this process. @group Environment loading @behavior readonly
Example:
env.Dump(env.IsEnvLoaded()) // #bool true (after LoadEnvFileIfExists) // #bool false (otherwise)
func IsHostEnvironment ¶
func IsHostEnvironment() bool
IsHostEnvironment reports whether the process is running *outside* any container or orchestrated runtime. @group Container detection @behavior readonly
Being a Docker host does NOT count as being in a container.
Example:
env.Dump(env.IsHostEnvironment()) // #bool true (on bare-metal/VM hosts) // #bool false (inside containers)
func IsKubernetes ¶
func IsKubernetes() bool
IsKubernetes reports whether the process is running inside Kubernetes. @group Container detection @behavior readonly
Checks the KUBERNETES_SERVICE_HOST env var and kubepods cgroup markers.
Example:
env.Dump(env.IsKubernetes()) // #bool true (inside Kubernetes pods) // #bool false (elsewhere)
func IsLinux ¶
func IsLinux() bool
IsLinux reports whether the runtime OS is Linux. @group Runtime @behavior readonly
Example:
env.Dump(env.IsLinux()) // #bool true (on Linux) // #bool false (on other OSes)
func IsMac ¶
func IsMac() bool
IsMac reports whether the runtime OS is macOS (Darwin). @group Runtime @behavior readonly
Example:
env.Dump(env.IsMac()) // #bool true (on macOS) // #bool false (elsewhere)
func IsUnix ¶
func IsUnix() bool
IsUnix reports whether the OS is Unix-like. @group Runtime @behavior readonly
Returns true for Linux, macOS, BSD, Solaris, and AIX identifiers.
Example:
env.Dump(env.IsUnix()) // #bool true (on Unix-like OSes) // #bool false (e.g., on Windows or Plan 9)
func IsWindows ¶
func IsWindows() bool
IsWindows reports whether the runtime OS is Windows. @group Runtime @behavior readonly
Example:
env.Dump(env.IsWindows()) // #bool true (on Windows) // #bool false (elsewhere)
func LoadEnvFileIfExists ¶
func LoadEnvFileIfExists() error
LoadEnvFileIfExists loads .env with optional layering for .env.local/.env.staging/.env.production, plus .env.testing/.env.host when present. @group Environment loading @behavior mutates-process-env
Behavior:
- Sets APP_ENV=local when unset.
- Chooses .env.testing when APP_ENV indicates tests (or Go test flags are present).
- Loads .env first when present; .env.<app-env> overlays for local/staging/production.
- Loads .env.host for host-to-container networking when running on the host or DinD.
- Idempotent: subsequent calls no-op after the first load.
Example: test-specific env file
tmp, _ := os.MkdirTemp("", "envdoc")
_ = os.WriteFile(filepath.Join(tmp, ".env.testing"), []byte("PORT=9090\nAPP_DEBUG=0"), 0o644)
_ = os.Chdir(tmp)
_ = os.Setenv("APP_ENV", env.Testing)
_ = env.LoadEnvFileIfExists()
env.Dump(os.Getenv("PORT"))
// #string "9090"
Example: default .env on a host
_ = os.WriteFile(".env", []byte("SERVICE=api\nAPP_DEBUG=3"), 0o644)
_ = env.LoadEnvFileIfExists()
env.Dump(os.Getenv("SERVICE"))
// #string "api"
func MustGet ¶
MustGet returns the value of key or panics if missing/empty. @group Typed getters @behavior panic
Example: required secret
_ = os.Setenv("API_SECRET", "s3cr3t")
secret := env.MustGet("API_SECRET")
env.Dump(secret)
// #string "s3cr3t"
Example: panic on missing value
os.Unsetenv("API_SECRET")
secret = env.MustGet("API_SECRET") // panics: env variable missing: API_SECRET
func MustGetBool ¶
MustGetBool panics if missing or invalid. @group Typed getters @behavior panic
Example: gate features explicitly
_ = os.Setenv("FEATURE_ENABLED", "true")
enabled := env.MustGetBool("FEATURE_ENABLED")
env.Dump(enabled)
// #bool true
Example: panic on invalid value
_ = os.Setenv("FEATURE_ENABLED", "maybe")
_ = env.MustGetBool("FEATURE_ENABLED") // panics when parsing
func MustGetInt ¶
MustGetInt panics if the value is missing or not an int. @group Typed getters @behavior panic
Example: ensure numeric port
_ = os.Setenv("PORT", "8080")
port := env.MustGetInt("PORT")
env.Dump(port)
// #int 8080
Example: panic on bad value
_ = os.Setenv("PORT", "not-a-number")
_ = env.MustGetInt("PORT") // panics when parsing
func OS ¶
func OS() string
OS returns the current operating system identifier. @group Runtime @behavior readonly
Mirrors runtime.GOOS; tests may override via the internal shim.
Example: inspect GOOS
env.Dump(env.OS()) // #string "linux" (on Linux) // #string "darwin" (on macOS) // #string "windows" (on Windows)
func SetAppEnv ¶
SetAppEnv sets APP_ENV to a supported value. @group Application environment @behavior mutates-process-env
Returns an error when the environment is unsupported.
Example: set a supported environment
_ = env.SetAppEnv(env.Staging) env.Dump(env.GetAppEnv()) // #string "staging"
func SetAppEnvLocal ¶
func SetAppEnvLocal() error
SetAppEnvLocal sets APP_ENV to "local". @group Application environment @behavior mutates-process-env
Example:
_ = env.SetAppEnvLocal() env.Dump(env.GetAppEnv()) // #string "local"
func SetAppEnvProduction ¶
func SetAppEnvProduction() error
SetAppEnvProduction sets APP_ENV to "production". @group Application environment @behavior mutates-process-env
Example:
_ = env.SetAppEnvProduction() env.Dump(env.GetAppEnv()) // #string "production"
func SetAppEnvStaging ¶
func SetAppEnvStaging() error
SetAppEnvStaging sets APP_ENV to "staging". @group Application environment @behavior mutates-process-env
Example:
_ = env.SetAppEnvStaging() env.Dump(env.GetAppEnv()) // #string "staging"
func SetAppEnvTesting ¶
func SetAppEnvTesting() error
SetAppEnvTesting sets APP_ENV to "testing". @group Application environment @behavior mutates-process-env
Example:
_ = env.SetAppEnvTesting() env.Dump(env.GetAppEnv()) // #string "testing"
Types ¶
This section is empty.