gofiber/fiber · error

parse constraint arg: %w

Error message

parse constraint arg: %w

What it means

Returned by minLenConstraintType.Analyze (constraint.go:341) when strconv.Atoi cannot parse the first constraint argument. Fiber route constraints like :param<minLen(N)> are analyzed at route registration; minLen expects an integer length, so a non-numeric argument fails parsing and is surfaced with this wrap.

Source

Thrown at constraint.go:341

	layout, ok := data[0].(string)
	if !ok || layout == "" {
		return false
	}
	_, err := time.Parse(layout, param)
	return err == nil
}

type minLenConstraintType struct{}

func (minLenConstraintType) Name() string { return ConstraintMinLen }
func (minLenConstraintType) Analyze(args []string) ([]any, error) {
	args = parseConstraintArgs(args)
	if len(args) == 0 {
		return nil, errors.New("minLen constraint requires an argument")
	}
	n, err := strconv.Atoi(args[0])
	if err != nil {
		return nil, fmt.Errorf("parse constraint arg: %w", err)
	}
	return []any{n}, nil
}

func (minLenConstraintType) Execute(param string, data []any) bool {
	if len(data) == 0 {
		return false
	}
	limit, ok := data[0].(int)
	if !ok {
		return false
	}
	return len(param) >= limit
}

type maxLenConstraintType struct{}

func (maxLenConstraintType) Name() string { return ConstraintMaxLen }

View on GitHub (pinned to 9a4c7e57fe)

Solutions

  1. Provide an integer literal to minLen, e.g. /:name<minLen(3)>.
  2. When building route patterns dynamically, strconv.Itoa the integer before concatenation.
  3. Validate any external input feeding a constraint argument is numeric before registering the route.

Example fix

// before — non-integer minLen argument
app.Get("/:name<minLen(minSize)>", handler)

// after — integer argument
app.Get("/:name<minLen(3)>", handler)
// or, dynamically:
app.Get("/:name<minLen("+strconv.Itoa(minSize)+")>", handler)
Defensive patterns

Strategy: validation

Validate before calling

// Validate route constraint args are integers before registration.
var intArg = regexp.MustCompile(`^\d+$`)
func validMinLenArg(arg string) bool { return intArg.MatchString(arg) }

Type guard

func isIntArg(s string) bool { _, err := strconv.Atoi(s); return err == nil }

Prevention

When it happens

Trigger: Registering a route whose minLen constraint argument is not an integer, e.g. app.Get("/:name<minLen(abc)>", ...). The Analyze phase runs at app.Register/AddRoute time, so the error appears during routing setup, not request handling. Multiple comma-separated args that are non-integer also hit it.

Common situations: Typo in the constraint (minLen(three)); templating/code-gen that substitutes a variable without quotes; copy-paste from a maxLen/range route leaving a non-numeric value; a dynamically-built route pattern concatenating user input that is not validated as an integer.

Related errors


AI-assisted analysis of gofiber/fiber@9a4c7e57fe (2026-08-04). Data as JSON: /data/errors/6c3ce85f5fe0815e.json. Report an issue: GitHub.