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 {