Типы данных

Go — это язык программирования со статической типизацией. Это означает, что переменные всегда имеют определенный тип и этот тип нельзя изменить. Статическая типизация, на первый взгляд, может показаться неудобной. Вы потратите кучу времени только на попытки исправить ошибки, не позволяющие программе скомпилироваться. Однако типы дают вам возможность понять, что именно делает программа, и помогают избежать распространённых ошибок.

Целые числа

Если вы ввели значение int64, вы не сможете использовать числа int и int64 в одном математическом выражении, пока не будет выполнено преобразование к одном типу данных.

Всегда следует учитывать, что при преобразовании из большего типа данных в меньший тип данных вы можете случайно обрезать данные.

int8: представляет целое число от -128 до 127 и занимает в памяти 1 байт (8 бит)

int16: представляет целое число от -32768 до 32767 и занимает в памяти 2 байта (16 бит)

int32: представляет целое число от -2147483648 до 2147483647 и занимает 4 байта (32 бита)

int64: представляет целое число от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 и занимает 8 байт (64 бита)

uint8: представляет целое число от 0 до 255 и занимает 1 байт

uuint16: представляет целое число от 0 до 65535 и занимает 2 байта

uint32: представляет целое число от 0 до 4294967295 и занимает 4 байта

uint64: представляет целое число от 0 до 18 446 744 073 709 551 615 и занимает 8 байт

byte: синоним типа uint8, представляет целое число от 0 до 255 и занимает 1 байт

rune: синоним типа int32, представляет целое число от -2147483648 до 2147483647 и занимает 4 байта

int: представляет целое число со знаком, которое в зависимости о платформы может занимать либо 4 байта, либо 8 байт. То есть соответствовать либо int32, либо int64.

uint: представляет целое беззнаковое число только без знака, которое, аналогично типу int, в зависимости о платформы может занимать либо 4 байта, либо 8 байт. То есть соответствовать либо uint32, либо uint64.

Здесь несложно запомнить, что есть типы со знаком (то есть которые могут быть отрицательными) и есть безнаковые положительные типы, которые начинаются на префикс u (uint32). Ну и также есть byte - синоним для uint8 и rune - синоним для int32.

Стоит отметить типы int и uint. Они имеют наиболее эффективный размер для определенной платформы (32 или 64 бита). Это наиболее используемый тип для представления целых чисел в программе. Причем различные компиляторы могут предоставлять различный размер для этих типов даже для одной и той же платформы.

Числа с плавающей точкой

В Go есть два вещественных типа: float32 и float64 (соответственно, часто называемые вещественными числами с одинарной и двойной точностью). А также два дополнительных типа для представления комплексных чисел (чисел с мнимой частью): complex64 и complex128. Как правило, мы должны придерживаться типа float64, когда работаем с числами с плавающей точкой.

При преобразовании float в целое число с типом int() Go обрезает часть с десятичными дробями для получения целого числа. Обратите внимание, что даже если вы захотите округлить 390.8 до 391, Go не сможет сделать это с типом int(). Вместо этого будет отброшена часть после десятичного разделителя.

float32: представляет число с плавающей точкой от 1.4*10-45 до 3.4*1038(для положительных). Занимает в памяти 4 байта (32 бита)

float64: представляет число с плавающей точкой от 4.9*10-324 до 1.8*10308 (для положительных) и занимает 8 байт.

Комплексные числа

complex64: комплексное число, где вещественная и мнимая части представляют числа float32

complex128: комплексное число, где вещественная и мнимая части представляют числа float64

Строки

Строки представлены типом string. В Go строке соответствует строковый литерал - последовательность символов, заключенная в двойные кавычки:

Вы не можете выполнять конкатенацию строк и целых чисел в Go, поэтому вам нужно будет преобразовывать переменную в строку.

Кроме обычных символов строка может содержать специальные последовательности (управляющие последовательности), которые начинаются с обратного слеша \. Наиболее распространенные последовательности:

\n: переход на новую строку

\r: возврат каретки

\t: табуляция

\": двойная кавычка внутри строк

\\: обратный слеш

Если переменной не присвоено значение, то она имеет значение по умолчанию, которое определено для ее типа. Для числовых типов это число 0, для логического типа - false, для строк - ""(пустая строка).

Тип bool

Логический тип или тип bool может иметь одно из двух значений: true (истина) или false (ложь).