code: func isLte(fl FieldLevel) bool {
  
  	field := fl.Field()
  	param := fl.Param()
  
  	switch field.Kind() {
  
  	case reflect.String:
  		p := asInt(param)
  
  		return int64(utf8.RuneCountInString(field.String())) <= p
  
  	case reflect.Slice, reflect.Map, reflect.Array:
  		p := asInt(param)
  
  		return int64(field.Len()) <= p
  
  	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
  		p := asInt(param)
  
  		return field.Int() <= p
  
  	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
  		p := asUint(param)
  
  		return field.Uint() <= p
  
  	case reflect.Float32, reflect.Float64:
  		p := asFloat(param)
  
  		return field.Float() <= p
  
  	case reflect.Struct:
  
  		if field.Type() == timeType {
  
  			now := time.Now().UTC()
  			t := field.Interface().(time.Time)
  
  			return t.Before(now) || t.Equal(now)
  		}
  	}
  
  	panic(fmt.Sprintf("Bad field type %T", field.Interface()))
  }
docs: // IsLte is the validation function for validating if the current field's value is less than or equal to the param's value.