aerospike-client-go: Using Client.GetObject fails with "interface conversion: interface {} is bool, not int"
I’m trying to use GetObject to marshal the bin data into a struct containing a handful of bool values. The error comes from the lines below in read_command_reflect.go, where value
is apparently already a bool, so trying to convert it to an int fails.
case reflect.Bool:
f.SetBool(value.(int) == 1)
I assume this could also happen with the other more complicated case reflect.Bool
in the switch under the reflect.Ptr
case further down.
When I replace the first bool case with the following, everything seems to work:
case reflect.Bool:
switch v := value.(type) {
case int:
f.SetBool(int(v) == 1)
default:
f.SetBool(bool(value.(bool)))
}
I’m not sure if this is an optimal solution, but I’m happy to put up a PR if it seems okay.
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Comments: 17
It is a slippery slope, and that’s why there is no string conversion support of “T”, “F”, “TRUE”, “FALSE”, “Y”, “N”, etc to boolean. And believe me, I used to do these in dBase, FoxPro days so I actually thought about them. In this case, we need to keep compatibility between our clients.