Go

Go

By DeepSource

string to int signedness casting GO-E1006

Bug risk

It is possible for integer casting, if not appropriately done to lose the signedness of the integer and might cause overflow as well.

For example: - int64 must not be casted to: "uint8", "uint16", "uint32", "uint64", "int8", "int16", "int32" int64 can lose signedness if converted to unsigned integer and if converted to a signed integer but a type other than int64, then overflow might occur.

  • uint64 must not be casted to: "uint8", "uint16", "uint32", "int8", "int16", "int32", "int64" uint64 would lose signedness if converted to a signed integer and might overflow. If converted to an unsigned integer, i.e., a type other than uint64, overflow might occur.

Examples

Bad practice

n, err := strconv.Atoi("42")
if err != nil {
    panic(err)
}

// `n` is of type `int`, so it is either `int64` or `int32` depending on the platform.
// Casting it to `uint8` might result in loss of signedness of the integer and might
// not give expected results.
_ = uint8(n)