go-redis/redis · error

redis: ScanSlice(non-pointer %T)

Error message

redis: ScanSlice(non-pointer %T)

What it means

Error "redis: ScanSlice(non-pointer %T)" thrown in go-redis/redis.

Source

Thrown at internal/proto/scan.go:135

		return nil
	case encoding.BinaryUnmarshaler:
		return v.UnmarshalBinary(b)
	case *net.IP:
		*v = b
		return nil
	default:
		return fmt.Errorf(
			"redis: can't unmarshal %T (consider implementing BinaryUnmarshaler)", v)
	}
}

func ScanSlice(data []string, slice interface{}) error {
	v := reflect.ValueOf(slice)
	if !v.IsValid() {
		return fmt.Errorf("redis: ScanSlice(nil)")
	}
	if v.Kind() != reflect.Ptr {
		return fmt.Errorf("redis: ScanSlice(non-pointer %T)", slice)
	}
	v = v.Elem()
	if v.Kind() != reflect.Slice {
		return fmt.Errorf("redis: ScanSlice(non-slice %T)", slice)
	}

	next := makeSliceNextElemFunc(v)
	for i, s := range data {
		elem := next()
		if err := Scan([]byte(s), elem.Addr().Interface()); err != nil {
			err = fmt.Errorf("redis: ScanSlice index=%d value=%q failed: %w", i, s, err)
			return err
		}
	}

	return nil
}

View on GitHub (pinned to 36d97525cd)

Solutions

  1. Pass a pointer to a slice (e.g. &dst) to ScanSlice
  2. Take the address of the destination slice

When it happens

Trigger: Thrown at internal/proto/scan.go:135 when the library encounters an invalid state.

Common situations: Document and check pointer requirements in wrapper helpers.


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