From f81cd34e34f2fc872a6960209d3a36f43e6c1ac9 Mon Sep 17 00:00:00 2001 From: Jack Palevich Date: Wed, 20 Jan 2010 23:20:25 +0800 Subject: [PATCH] Skip nil values when marshaling. --- struct.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/struct.go b/struct.go index d4ba6f3..d51368b 100644 --- a/struct.go +++ b/struct.go @@ -355,6 +355,9 @@ func writeSVList(w io.Writer, svList StringValueArray) (err os.Error) { sort.Sort(svList) for _, sv := range (svList) { + if isValueNil(sv.value) { + continue // Skip null values + } s := sv.key _, err = fmt.Fprintf(w, "%d:%s", len(s), s) if err != nil { @@ -468,6 +471,19 @@ func writeValue(w io.Writer, val reflect.Value) (err os.Error) { return } +func isValueNil(val reflect.Value) bool { + if val == nil { + return true + } + switch v := val.(type) { + case *reflect.InterfaceValue: + return isValueNil(v.Elem()) + default: + return false + } + return false +} + func Marshal(w io.Writer, val interface{}) os.Error { return writeValue(w, reflect.NewValue(val)) }