Go supports integer data types extensively. Now, we will see what are those.
Signed integers in Go
Signed integer types supported by Go is shown below.
- int8 (8-bit signed integer whose range is -128 to 127)
- int16 (16-bit signed integer whose range is -32768 to 32767)
- int32 (32-bit signed integer whose range is -2147483648 to 2147483647)
- int64 (64-bit signed integer whose range is -9223372036854775808 to 9223372036854775807)
Unsigned integers in Go
- uint8 (8-bit unsigned integer whose range is 0 to 255 )
- uint16 (16-bit unsigned integer whose range is 0 to 65535 )
- uint32 (32-bit unsigned integer whose range is 0 to 4294967295 )
- uint64 (64-bit unsigned integer whose range is 0 to 18446744073709551615 )
Integer Overflow in Golang
If you assign a type and then use a number larger than the types range to assign it, it will fail. Below is a program trying just that.
package main
import (
"fmt"
)
func main() {
var x uint8
fmt.Println("Throws integer overflow")
x = 267 // range of uint8 is 0-255
}
Type conversion in Golang
If you convert to a type that has range lower than your current range, data loss will occur. We do typecast by directly using the name of the variable as a function to convert types.
package main
import (
"fmt"
)
func main() {
var x int32
var y uint32 // range 0 to 4294967295
var z uint8 // range 0 to 255
fmt.Println("Type Conversion")
x = 26700
y = uint32(x) // data preserved because number is inside range
z = uint8(x) // data loss due to out of range conversion
fmt.Println(y, z) // prints 26700 76
}