diff --git a/ip.go b/ip.go index 06b8bcb5..046f48b3 100644 --- a/ip.go +++ b/ip.go @@ -32,6 +32,9 @@ func (i *ipValue) Type() string { } func ipConv(sval string) (interface{}, error) { + if sval == "" || sval == "" { + return net.IP(nil), nil + } ip := net.ParseIP(sval) if ip != nil { return ip, nil diff --git a/ip_nil_default_test.go b/ip_nil_default_test.go new file mode 100644 index 00000000..035f14c6 --- /dev/null +++ b/ip_nil_default_test.go @@ -0,0 +1,35 @@ +package pflag + +import ( + "net" + "testing" +) + +func TestGetIPNilDefault(t *testing.T) { + t.Run("IP", func(t *testing.T) { + f := NewFlagSet("test", ContinueOnError) + f.IP("ip", nil, "IP address") + + ip, err := f.GetIP("ip") + if err != nil { + t.Fatalf("GetIP returned error: %v", err) + } + if ip != nil { + t.Fatalf("expected nil IP, got %v", ip) + } + }) + + t.Run("IPVar", func(t *testing.T) { + f := NewFlagSet("test", ContinueOnError) + var ip net.IP + f.IPVar(&ip, "ip", nil, "IP address") + + got, err := f.GetIP("ip") + if err != nil { + t.Fatalf("GetIP returned error: %v", err) + } + if got != nil { + t.Fatalf("expected nil IP, got %v", got) + } + }) +}