go-redis/redis · error

redis: can't unmarshal %T (consider implementing BinaryUnmar

Error message

redis: can't unmarshal %T (consider implementing BinaryUnmarshaler)

What it means

Error "redis: can't unmarshal %T (consider implementing BinaryUnmarshaler)" thrown in go-redis/redis.

Source

Thrown at internal/proto/scan.go:124

		return nil
	case *time.Time:
		var err error
		*v, err = time.Parse(time.RFC3339Nano, util.BytesToString(b))
		return err
	case *time.Duration:
		n, err := util.ParseInt(b, 10, 64)
		if err != nil {
			return err
		}
		*v = time.Duration(n)
		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)

View on GitHub (pinned to 36d97525cd)

Solutions

  1. Implement encoding.BinaryUnmarshaler on the destination type
  2. Scan into a supported primitive type instead

When it happens

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

Common situations: Use string/[]byte destinations and decode explicitly for custom types.


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