Fix default values for custom fields Fallback to the original default detection logic if we have an unknown type. Fixes #91
diff --git a/flag.go b/flag.go index c28f3bd..b0b0d46 100644 --- a/flag.go +++ b/flag.go
@@ -437,7 +437,17 @@ case *intSliceValue, *stringSliceValue, *stringArrayValue: return f.DefValue == "[]" default: - return true + switch f.Value.String() { + case "false": + return true + case "<nil>": + return true + case "": + return true + case "0": + return true + } + return false } }
diff --git a/flag_test.go b/flag_test.go index 1befb94..b294fc7 100644 --- a/flag_test.go +++ b/flag_test.go
@@ -891,6 +891,7 @@ --StringSlice stringSlice string slice with zero default --Z int an int that defaults to zero --custom custom custom Value implementation + --customP custom a VarP with default (default 10) --maxT timeout set timeout for dial ` @@ -934,6 +935,9 @@ var cv customValue fs.Var(&cv, "custom", "custom Value implementation") + cv2 := customValue(10) + fs.VarP(&cv2, "customP", "", "a VarP with default") + fs.PrintDefaults() got := buf.String() if got != defaultOutput {