package utils import ( "os" "strconv" ) // Gets value from environment or uses default value func GetEnvOrDefault[T string | int | bool | float64](key string, defaultValue T) T { value, exists := os.LookupEnv(key) if !exists { return defaultValue } // Handle conversion based on the type of defaultValue switch any(defaultValue).(type) { case string: return any(value).(T) case int: if intValue, err := strconv.Atoi(value); err == nil { return any(intValue).(T) } case bool: if boolValue, err := strconv.ParseBool(value); err == nil { return any(boolValue).(T) } case float64: if floatValue, err := strconv.ParseFloat(value, 64); err == nil { return any(floatValue).(T) } } return defaultValue // return default value if conversion fails }