go-redis/redis · error

BitFieldRO: invalid number of arguments, must be even

Error message

BitFieldRO: invalid number of arguments, must be even

What it means

Error "BitFieldRO: invalid number of arguments, must be even" thrown in go-redis/redis.

Source

Thrown at bitmap_commands.go:188

	args := make([]interface{}, 2, 2+len(values))
	args[0] = "bitfield"
	args[1] = key
	args = appendArgs(args, values)
	cmd := NewIntSliceCmd(ctx, args...)
	_ = c(ctx, cmd)
	return cmd
}

// BitFieldRO - Read-only variant of the BITFIELD command.
// It is like the original BITFIELD but only accepts GET subcommand and can safely be used in read-only replicas.
// - BitFieldRO(ctx, key, "<Encoding0>", "<Offset0>", "<Encoding1>","<Offset1>")
func (c cmdable) BitFieldRO(ctx context.Context, key string, values ...interface{}) *IntSliceCmd {
	args := make([]interface{}, 2, 2+len(values))
	args[0] = "BITFIELD_RO"
	args[1] = key
	if len(values)%2 != 0 {
		c := NewIntSliceCmd(ctx)
		c.SetErr(errors.New("BitFieldRO: invalid number of arguments, must be even"))
		return c
	}
	for i := 0; i < len(values); i += 2 {
		args = append(args, "GET", values[i], values[i+1])
	}
	cmd := NewIntSliceCmd(ctx, args...)
	_ = c(ctx, cmd)
	return cmd
}

View on GitHub (pinned to 36d97525cd)

Solutions

  1. Provide an even number of field-spec arguments to BitFieldRO (each GET needs a type and an offset)
  2. Ensure the slice you spread into the call has length divisible by 2

When it happens

Trigger: Thrown at bitmap_commands.go:188 when the library encounters an invalid state.

Common situations: Construct BitFieldRO argument pairs in a loop over structs so a dangling half-pair is impossible.


AI-assisted analysis of go-redis/redis@36d97525cd (2026-08-06). Data as JSON: /data/errors/ad246e279fa935d6.json. Report an issue: GitHub.