title: iterate through map[string]interface{} recursively using reflect package
body: <p>i just trying learn to use reflection, i wanna go througe each field in the map[string]interface{} this why i using
  json.Unmarshal to interface{}.</p>
  
  <pre><code>func i2s(data interface{}, out interface{}) error {
      fmt.Println(reflect.TypeOf(data).Kind())
      switch reflect.TypeOf(data).Kind() {
      case reflect.Map, reflect.Array, reflect.Ptr, reflect.Slice:
          i2s(reflect.TypeOf(data).Elem(), out)
  
      case reflect.Struct:
          for i := 0; i &lt; reflect.ValueOf(data).NumField(); i++ {
              f := reflect.TypeOf(data).Field(i)
              fmt.Println(f.Name, f.Type.Name())
  
              if f.Tag != "" {
                  fmt.Println(f.Tag)
              }
          }
      }
      return nil
  }
  
  type Simple struct {
      ID       int
      Username string
      Active   bool
  }
  
  func main() {
      test := &amp;Simple{
          ID:       42,
          Username: "dcandu",
          Active:   true,
      }
  
      jsonRaw, _ := json.Marshal(test)
  
      var tmpData interface{}
      json.Unmarshal(jsonRaw, &amp;tmpData)
  
      result := new(Simple)
      i2s(tmpData, result)
  }
  </code></pre>
  
  <p>When i run this code i get the infinite loop.
  Please tell me where i'm doing wrong.</p>
  
  <p>Thank you.</p>