code: func ToLower(m map[string]interface{}) {
  	for k, v := range m {
  		switch v.(type) {
  		case map[interface{}]interface{}:
  			v = cast.ToStringMap(v)
  			ToLower(v.(map[string]interface{}))
  		case map[string]interface{}:
  			ToLower(v.(map[string]interface{}))
  		}
  
  		lKey := strings.ToLower(k)
  		if k != lKey {
  			delete(m, k)
  			m[lKey] = v
  		}
  
  	}
  }
docs: // ToLower makes all the keys in the given map lower cased and will do so
  // recursively.
  // Notes:
  // * This will modify the map given.
  // * Any nested map[interface{}]interface{} will be converted to map[string]interface{}.