@@ -7,7 +7,7 @@ flag > environment variable > default value. Both environment variables and flag
77
88Flag parsing is handled by the standard library's flag package via the CommandLine flag set.
99Like the flag package, errors encountered during environment variable parsing will cause
10- the program to exit with status code 2.
10+ the program to exit with status code 2 by default, but the error handler can be predefined .
1111
1212# Example usage:
1313
@@ -31,7 +31,6 @@ import (
3131 "encoding/base64"
3232 "encoding/json"
3333 "flag"
34- "fmt"
3534 "net"
3635 "net/url"
3736 "os"
@@ -387,26 +386,18 @@ func handleVar[T any](b binding, ptr *T, parser func(string) (T, error)) {
387386 if envVal := os .Getenv (b .envName ); envVal != "" {
388387 v , err := parser (envVal )
389388 if err != nil {
390- fmt .Fprintf (
391- flag .CommandLine .Output (),
392- "Unable to parse env-variable %s as type %T\n " ,
393- b .envName ,
394- * ptr ,
395- )
396-
397- // os.Exit(2) replicates the default error handling behavior of flag.CommandLine
398- if ! isTestEnv {
399- os .Exit (2 )
400- }
389+ handleError (err , ptr , envVal , b .envName , "" )
390+ } else {
391+ * ptr = v
401392 }
402- * ptr = v
403393 }
404394
405395 if b .flagName != "" {
406396 flag .Func (b .flagName , b .flagUsage , func (s string ) error {
407397 parsed , err := parser (s )
408398 if err != nil {
409- return err
399+ handleError (err , ptr , s , "" , b .flagName )
400+ return nil
410401 }
411402
412403 * ptr = parsed
@@ -420,18 +411,10 @@ func handleSlice[T any](b binding, ptr *[]T, parser func(string) (T, error)) {
420411 for _ , v := range strings .Split (envVal , b .sliceSep ) {
421412 parsed , err := parser (v )
422413 if err != nil {
423- fmt .Fprintf (
424- flag .CommandLine .Output (),
425- "Unable to parse env-variable %s as type %T\n " ,
426- b .envName ,
427- * ptr ,
428- )
429-
430- // os.Exit(2) replicates the default error handling behavior of flag.CommandLine
431- if ! isTestEnv {
432- os .Exit (2 )
433- }
414+ handleError (err , ptr , envVal , b .envName , "" )
415+ continue
434416 }
417+
435418 * ptr = append (* ptr , parsed )
436419 }
437420 }
@@ -441,7 +424,8 @@ func handleSlice[T any](b binding, ptr *[]T, parser func(string) (T, error)) {
441424 for _ , v := range strings .Split (s , b .sliceSep ) {
442425 parsed , err := parser (v )
443426 if err != nil {
444- return err
427+ handleError (err , ptr , s , "" , b .flagName )
428+ continue
445429 }
446430
447431 * ptr = append (* ptr , parsed )
@@ -451,5 +435,3 @@ func handleSlice[T any](b binding, ptr *[]T, parser func(string) (T, error)) {
451435 })
452436 }
453437}
454-
455- var isTestEnv bool
0 commit comments