package env import ( "bufio" "os" "strings" ) func Default(key, def string) string { if v, ok := os.LookupEnv(key); ok { return v } return def } type secret struct { value string } func (s secret) Secret() string { return s.value } func (s secret) String() string { return "***" } func Secret(key, def string) secret { if v, ok := os.LookupEnv(key); ok { return secret{v} } return secret{def} } func DotEnv() { fd, err := os.Open(".env") if err != nil { return } scan := bufio.NewScanner(fd) for scan.Scan() { line := scan.Text() if strings.HasPrefix(line, "#") { continue } key, val, ok := strings.Cut(line, "=") if !ok { continue } os.Setenv(strings.TrimSpace(key), strings.TrimSpace(val)) } }