title: How to convert interface{} to map
body: <p>I am trying to create a function that could accept following</p>
  
  <pre><code>*struct
  []*struct
  map[string]*struct
  </code></pre>
  
  <p>Here struct could be any struct not just a specific one.
  Converting interface to <code>*struct</code> or <code>[]*struct</code> is working fine.
  But giving error for map.</p>
  
  <p>After reflect it shows it is map[] but giving error when try to iterate over range.</p>
  
  <p>Here is code</p>
  
  <pre><code>package main
  
  import (
      "fmt"
      "reflect"
  )
  
  type Book struct {
      ID     int
      Title  string
      Year   int
  }
  
  func process(in interface{}, isSlice bool, isMap bool) {
      v := reflect.ValueOf(in)
  
      if isSlice {
          for i := 0; i &lt; v.Len(); i++ {
              strct := v.Index(i).Interface()
              //... proccess struct
          }
          return
      }
  
      if isMap {
          fmt.Printf("Type: %v\n", v)     // map[]
          for _, s := range v {           // Error: cannot range over v (type reflect.Value)
              fmt.Printf("Value: %v\n", s.Interface())
          }
      }    
  }
  
  func main() {
      b := Book{}
      b.Title = "Learn Go Language"
      b.Year = 2014
      m := make(map[string]*Book)
      m["1"] = &amp;b
  
      process(m, false, true)
  }
  </code></pre>
  
  <p>Is there any way to convert <code>interface{}</code> to map and iterate or get it's elements.</p>