code: func isEq(fl FieldLevel) bool {
  
  	field := fl.Field()
  	param := fl.Param()
  
  	switch field.Kind() {
  
  	case reflect.String:
  		return field.String() == param
  
  	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
  	}
  
  	panic(fmt.Sprintf("Bad field type %T", field.Interface()))
  }
docs: // IsEq is the validation function for validating if the current field's value is equal to the param's value.