Типы данных
Типы данных определяют виды значений, которые сохраняются определенными переменными при написании программы. Типы данных также помогают определить операции (сложение, вычитание и т.п.), которые можно выполнять с использованием данных.
Как отмечалось ранее в данном руководстве, Go — это язык программирования со статической типизацией. Это означает, что переменные всегда имеют определенный тип и этот тип нельзя изменить.
Пример:
package main
import "fmt"
func main() {
var name string = "Ivan"
fmt.Println(name) // Ivan
name = 25 // На этом этапе программа уже будет "ругаться"
fmt.Println(name) // Вывод: cannot use 25 (untyped int constant) as string value in assignment
}
Предложение cannot use 25 (untyped int constant) as string value in assignment
означает, что мы не можем присвоить значение 25
в качестве строкового значения (string) при инициализации. Это связано с тем, что значение 25
имеет другой тип данных (int - сокращенное от integer (целое число)).
Числа
В Go есть несколько различных типов данных для представления чисел. В данном руководстве мы разделим числа на два различных класса: целые числа (int) и числа с плавающей точкой (float).
Целые числа
Целые числа — это числа без дробной части. Наша система строится на 10 различных цифрах (от 0 до 9). В Go существуют следующие типы целых чисел: uint8
, uint16
, uint32
, uint64
, int8
, int16
, int32
и int64
. 8, 16, 32 и 64 говорит нам, сколько бит использует каждый тип. uint
означает «unsigned integer» (беззнаковое целое). Беззнаковое целое может принимать только положительные значения (или ноль), в то время как int означает «signed integer» (знаковое целое).
Тип данных | Значение аббреваитуры | Диапазон |
---|---|---|
uint8 | Беззнаковые 8-битные целые числа | от 0 до 255 |
uint16 | Беззнаковые 16-битные целые числа | от 0 до 65535 |
uint32 | Беззнаковые 32-битные целые числа | от 0 до 4294967295 |
uint64 | Беззнаковые 64-битные целые числа | от 0 до 18446744073709551615 |
int8 | Знаковые 8-битные целые числа | от -128 до 127 |
int16 | Знаковые 16-битные целые числа | от -32768 до 32767 |
int32 | Знаковые 32-битные целые числа | от -2147483648 до 2147483647 |
int64 | Знаковые 64-битные целые числа | от -9223372036854775808 до 9223372036854775807 |
Стоит отметить типы int и uint. Они имеют наиболее эффективный размер для определенной платформы (32 или 64 бита):
int
- представляет целое число со знаком, которое в зависимости от платформы может занимать либо 4 байта, либо 8 байт. То есть соответствовать либо int32, либо int64.uint
- представляет целое число только без знака, которое, аналогично типу int, в зависимости от платформы может занимать либо 4 байта, либо 8 байт. То есть соответствовать либо uint32, либо uint64.
Также в дополнение к этому существуют два типа-псевдонима: byte (то же самое, что uint8
) и rune (то же самое, что int32
). Байты очень распространенная единица измерения в компьютерах (1 байт = 8 бит, 1024 байта = 1 килобайт, 1024 килобайта = 1 мегабайт и т.д.), и именно поэтому тип byte в Go часто используется для определения других типов.
Примеры определения переменных, которые представляют целочисленные типы:
var a int8 = -1
var b uint8 = 2
var c byte = 3 // byte - синоним типа uint8
var d int16 = -4
var f uint16 = 5
var g int32 = -6
var h rune = -7 // rune - синоним типа int32
var j uint32 = 8
var k int64 = -9
var l uint64 = 10
var m int = -1000
var n uint = 1000
Числа с плавающей точкой
Числа с плавающей точкой — это числа, которые содержат вещественную часть (вещественные числа). Ярким представителем данного типа является число . Для представления дробных чисел есть два типа:
float32
— представляет собой число с плавающей точкой от 1.4 * 10 до 3.3 * 10. Занимает в памяти 32 бита (4 байта)float64
— представляет собой число с плавающей точной от 4.9 * 10 до 1.8 * 10. Занимает в памяти 64 бита (8 байт). По умолчанию присваивается именноfloat64
Примеры использования float32
и float64
:
var f float32 = 10.1
var g float32 = 7.5
var h float32 = 4.9
var d float64 = 2.28
var pi float64 = 3.14
var e float64 = 2.718
Комплексные числа
В Golang также существуют комплексные числа как отдельный тип данных:
complex64
— комплксное число, в которой вещественная и мнимая части представляют числаfloat32
complex128
— комплексное число, где вещественная и мнимая части представляют числаfloat64
Примеры переменных с типом complex64
и complex128
:
var z complex64 = 1+2i
var l complex128 = 3+4i
Тип bool
Тип bool или логический тип может иметь значение true (истина) или false (ложь). Переменная такого типа будет знаимать только один байт. С этим типом часто используются три логических оператора:
Оператор | Значение |
---|---|
&& | И |
ll | ИЛИ |
! | НЕ |
!
(НЕ - операция отрицания). Инвертирует значение. Если операнд равен true, то возвращает false, иначе возвращает true. Пример:
var a bool = true
var b bool = !a // false
var c bool = !b // true
&&
(И - конъюкция, логическое умножение). Возвращает true, если оба операнда не равны false. Возвращает false, если хотя бы один операнд равен false. Пример:
var b bool = 4 > 3 && 6 > 8 // flase
var c bool = 4 > 3 && 6 > 5 // true
||
(ИЛИ - дизъюнкция, логическое сложение). Возвращает true, если хотя бы один операнд не равен false. Возвращает false, если оба операнда равны false. Пример:
var d bool = 2 > 3 || 1 > 2 // false
var e bool = 2 > 1 || 3 > 4 // true
Примечание от автора: если вы плохо знакомы с основами математической логики, то настоятельно рекомендую ознакомиться с данной статьей.
Тип строка
В теме Переменные мы уже косвенно затрагивали тип данных строка. Как вы уже знаете, строки представлены типом string. Литеральные значения, помещенные в кавычки относятся имеено к данному типу. Следующие строки кода равнозначны:
cake := "cake"
var cake = "cake"
var cake string = "cake"
При объявлении переменной без указанного значения она будет инициализирована с нулевым значением, а нулевые значения типа string являются пустые кавычки (""
):
var fool string
fmt.Println(fool) // ""
Кстати, если говорить о предыдущих изученных типах(int, float, bool), то картина будет выглядеть следующим образом:
var numOne int
var numTwo float64
var boo bool
fmt.Println(numOne, numTwo, boo) // 0 0 false
Т.е. из вышеуказанного примера стоит обратить внимание на то, что у переменной с типом данных bool по умолчанию будет значение false
.
Escape-последовательности
Помимо обычных символов строка может содержать специальные последовательности (или escape-последовательности), которые всегда начинаются с обратного слеша \
. Таблица с наиболее часто используемыми escape-последовательностями представлена ниже:
Escape-последовательность | Описание |
---|---|
\n | переход на новую строку |
\t | табуляция |
\" | двойная кавычка внутри строк |
\\ | обратный слеш |