### Data Types in Go language

Data type defines a set of related values, describe the operations that can be done on them and define the way the stored in memory.
For example: Suppose you have a Car of VW Polo, but a car can be of any other company with some other basic and some advanced features.
But if we called a name Car, then in your mind a picture is created that there is a vehicle with 4-wheels and steering. Each car has some features like the color, company, make, model etc.

Types in programming work in a similar way, For example, "Hello World" is a string and every string have some length.

## Numbers

Go Comes with different types to represent numbers, Numbers can be categorized into two broad categories...

### Integer

The integer represents only those numbers which don't include any decimal places and can be of any positive and negative numbers.
Example : {1, 3, -4, 11, 123, 534} all are integer numbers

Go's integer type can be uint8, uint16, uint32, uint64, int8, int16, int32, and int64. 8, 16, 32 and 64 represents the number of bits each of data type uses.

uint means "Unsigned integer" which only includes positive integers, whereas int means "signed integers" which includes positive and negative both numbers.
Following table represents unsigned integral data types along with their allowed range.

Data Type Memory Used Range
uint8 8 bits 0 to 28-1 (0 to 255)
uint16 16 bits 0 to 216-1 (0 to 65535)
uint32 32 bits 0 to 232-1 (0 to 4294967295)
uint64 64 bits 0 to 264-1

Following table represents integral (signed) data types along with their allowed range.

Data Type Memory Used Range
uint8 8 bits -27 to 27-1 (-128 to 127)
uint16 16 bits -215-1 to 215-1 (-32768 to 32767)
uint32 32 bits -231-1 to 231-1 (-2147483648 to 2147483647)
uint64 64 bits -263-1 to 263-1

In Go int8, int32 are alias byte and rune respectively. Also there are 3 machine dependent data types uint, int, uintptr. They are machine dependent because their size depend on the machine architecture in which you program is running.