Fix omitempty support for floats.

This commit is contained in:
Gustavo Niemeyer 2015-06-24 11:29:02 +01:00
Родитель c1cd2254a6
Коммит 7ad95dd079
2 изменённых файлов: 10 добавлений и 2 удалений

Просмотреть файл

@ -190,6 +190,12 @@ var marshalTests = []struct {
A struct{ X, y int } "a,omitempty,flow"
}{struct{ X, y int }{0, 1}},
"{}\n",
}, {
&struct {
A float64 "a,omitempty"
B float64 "b,omitempty"
}{1, 0},
"a: 1\n",
},
// Flow flag
@ -340,7 +346,7 @@ var marshalErrorTests = []struct {
panic: `Duplicated key 'b' in struct struct \{ B int; .*`,
}, {
value: &struct {
A int
A int
B map[string]int ",inline"
}{1, map[string]int{"a": 2}},
panic: `Can't have key "a" in inlined map; conflicts with struct field`,

Просмотреть файл

@ -324,13 +324,15 @@ func isZero(v reflect.Value) bool {
return v.Len() == 0
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
return v.Int() == 0
case reflect.Float32, reflect.Float64:
return v.Float() == 0
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
return v.Uint() == 0
case reflect.Bool:
return !v.Bool()
case reflect.Struct:
vt := v.Type()
for i := v.NumField()-1; i >= 0; i-- {
for i := v.NumField() - 1; i >= 0; i-- {
if vt.Field(i).PkgPath != "" {
continue // Private field
}