Typed environment configuration loader

Go
package main

import (
	"fmt"
	"os"
	"strconv"
	"strings"
	"time"
)

// MustEnv returns the parsed value of key, or fallback when unset or invalid.
func MustEnv[T any](key string, fallback T, parse func(string) (T, error)) T {
	raw, ok := os.LookupEnv(key)
	if !ok || strings.TrimSpace(raw) == "" {
		return fallback
	}
	value, err := parse(strings.TrimSpace(raw))
	if err != nil {
		return fallback
	}
	return value
}

func main() {
	config := map[string]any{
		"port":    MustEnv("PORT", 8080, strconv.Atoi),
		"debug":   MustEnv("DEBUG", false, strconv.ParseBool),
		"timeout": MustEnv("TIMEOUT", 5*time.Second, time.ParseDuration),
		"apiBase": MustEnv("API_BASE", "https://api.example.com", func(s string) (string, error) { return s, nil }),
	}
	fmt.Printf("port=%v debug=%v timeout=%v base=%v\n",
		config["port"], config["debug"], config["timeout"], config["apiBase"])
}