package utils import ( "os" "strconv" ) func TryGetEnv[T any]( name string, fallback T ) T { v := os.Getenv( name ) if v != "" { switch any( fallback ).(type) { case uint64: p, err := strconv.ParseUint( v, 10, 64 ) if err == nil { return any( uint64( p ) ).(T) } case uint32: p, err := strconv.ParseUint( v, 10, 32 ) if err == nil { return any( uint32( p ) ).(T) } case int: p, err := strconv.ParseInt( v, 10, 32 ) if err == nil { return any( int( p ) ).(T) } case float64: p, err := strconv.ParseFloat( v, 64 ) if err == nil { return any( float64( p ) ).(T) } case float32: p, err := strconv.ParseFloat( v, 32 ) if err == nil { return any( float32( p ) ).(T) } default: return any( v ).(T) } } return fallback }