code: func (c *Config) Unmarshal(out interface{}) error {
  	valueof := reflect.ValueOf(out)
  	if valueof.Kind() != reflect.Ptr {
  		return ErrStructPtr
  	}
  	valueof = valueof.Elem()
  	if valueof.Kind() != reflect.Struct {
  		return ErrStructPtr
  	}
  
  	typeof := valueof.Type()
  
  	for i := 0; i < valueof.NumField(); i++ {
  		fieldT := typeof.Field(i)
  		fieldV := valueof.Field(i)
  
  		if value, found := c.data[fieldT.Name]; found {
  			switch fieldV.Kind() {
  			case reflect.Bool:
  				v, _ := strconv.ParseBool(value)
  				fieldV.SetBool(v)
  
  			case reflect.Int:
  				v, _ := strconv.ParseInt(value, 10, 0)
  				fieldV.SetInt(v)
  			case reflect.Uint:
  				v, _ := strconv.ParseUint(value, 10, 0)
  				fieldV.SetUint(v)
  
  			case reflect.Float64:
  				v, _ := strconv.ParseFloat(value, 64)
  				fieldV.SetFloat(v)
  			/*case reflect.Float32:
  				v, _ := strconv.ParseFloat(value, 32)
  				fieldV.SetFloat(v)*/
  
  			case reflect.String:
  				fieldV.SetString(value)
  
  			default:
  				return TypeError(fieldV.Kind().String())
  			}
  		}
  	}
  	return nil
  }
docs: // Unmarshal assigns values into the pointer to struct given by out, for the
  // keys found.
  //
  // The valid types in the struct fields for the matched keys are: bool, int,
  // uint, float64, string.
  //
  // The errors that Unmarshal return can be ErrStructPtr or TypeError.