Denmaseno 8 سال پیش
والد
کامیت
058e5c04e8
1فایلهای تغییر یافته به همراه21 افزوده شده و 19 حذف شده
  1. 21 19
      dump.go

+ 21 - 19
dump.go

@@ -53,28 +53,30 @@ func fdump(w io.Writer, rx int, rd int, tab string, value reflect.Value) {
 	} else if kindIn(value.Kind(), reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64) {
 		fmt.Fprintf(w, "%+v /* Type:%s */", value, value.Type().String())
 	} else if value.Kind() == reflect.Struct {
-		if t, ok := value.Interface().(time.Time); ok {
-			fmt.Fprintf(w, "%s /* Type:%s */", t, value.Type())
-		} else {
-			ntab := tab + tabSpace
-			fmt.Fprintf(w, "{ /* Type:%s */", value.Type().String())
-			il := value.NumField()
-			for i, j := 0, 0; i < il && i < MaxFieldLen; i++ {
-				tf := value.Type().Field(i)
-				tag := strings.Split(value.Type().Field(i).Tag.Get("dump"), ",")
-				if !InStringSlice("ignore", tag...) {
-					if j > 0 {
-						fmt.Fprintf(w, ",\n%s\"%s\": ", ntab, tf.Name)
-					} else {
-						fmt.Fprintf(w, "\n%s\"%s\": ", ntab, tf.Name)
-					}
-					vf := value.Field(i)
-					fdump(w, rx, rd+1, ntab, vf)
-					j++
+		if value.CanInterface() {
+			if t, ok := value.Interface().(time.Time); ok {
+				fmt.Fprintf(w, "%s /* Type:%s */", t, value.Type())
+				return
+			}
+		}
+		ntab := tab + tabSpace
+		fmt.Fprintf(w, "{ /* Type:%s */", value.Type().String())
+		il := value.NumField()
+		for i, j := 0, 0; i < il && i < MaxFieldLen; i++ {
+			tf := value.Type().Field(i)
+			tag := strings.Split(value.Type().Field(i).Tag.Get("dump"), ",")
+			if !InStringSlice("ignore", tag...) {
+				if j > 0 {
+					fmt.Fprintf(w, ",\n%s\"%s\": ", ntab, tf.Name)
+				} else {
+					fmt.Fprintf(w, "\n%s\"%s\": ", ntab, tf.Name)
 				}
+				vf := value.Field(i)
+				fdump(w, rx, rd+1, ntab, vf)
+				j++
 			}
-			fmt.Fprintf(w, "\n%s}", tab)
 		}
+		fmt.Fprintf(w, "\n%s}", tab)
 	} else if value.Kind() == reflect.Slice {
 		ntab := tab + tabSpace
 		if value.Type().String() == "[]uint8" {