package envy
import (
"os"
"strconv"
"time"
)
func Get[T comparable](key string) T {
var zero T
val, ok := os.LookupEnv(key)
if !ok {
return zero
}
var res any
switch any(zero).(type) {
case string:
res = val
case int:
if n, err := strconv.Atoi(val); err == nil {
res = n
}
case int64:
if n, err := strconv.ParseInt(val, 10, 64); err == nil {
res = n
}
case float64:
if f, err := strconv.ParseFloat(val, 64); err == nil {
res = f
}
case bool:
if b, err := strconv.ParseBool(val); err == nil {
res = b
}
case time.Duration:
if d, err := time.ParseDuration(val); err == nil {
res = d
}
}
return res.(T)
}
func GetOrDefault[T comparable](key string, def T) T {
var zero T
if val := Get[T](key); val != zero {
return val
}
return def
}
|