Типы данных — это обозначение языком программирования типа хранимых значений.
В Go встроено несколько основных типов данных. В этом уроке рассматриваются булевы, числовые и строковые типы данных в языке программирования Go (Golang). Более подробную информацию можно найти в документации Go.
Булевый тип данных
Булевы значения могут быть либо false
(эквивалент 0), либо true
(эквивалент 1). Хотя в принципе для их хранения требуется всего 1 бит, в Go для удобства используется байт.
Data type | Number of bits | Minimum value | Maximum value |
---|---|---|---|
bool | 8 | false |
true |
Числовые типы данных
В Go есть три категории числовых типов данных:
- Целое число (целые числа)
- Плавающая точка (числа с дробной частью)
- Комплексные (мнимые числа)
Целые числа
Представляют собой целые числа. Целочисленные типы данных имеют различную длину и могут быть знаковыми или беззнаковыми:
Data type | Number of bits | Minimum value | Maximum value |
---|---|---|---|
int8 | 8 | -128 | 127 |
int16 | 16 | -32,768 | 32,767 |
int32 | 32 | -2,147,483,648 | 2,147,483,647 |
int64 | 64 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
uint8 | 8 | 0 | 255 |
uint16 | 16 | 0 | 65,535 |
uint32 | 32 | 0 | 4,294,967,295 |
uint64 | 64 | 0 | 18,446,744,073,709,551,615 |
Существуют также псевдонимы для некоторых из перечисленных типов данных:
byte
: псевдоним дляuint8
rune
: псевдоним дляint32
(представляет собой точку кода Unicode (в свободном смысле — «символ»))int
: псевдоним дляint32
илиint64
в зависимости от платформыuint
: псевдоним дляuint32
илиuint64
в зависимости от платформы.
Большинство современных компьютеров — это 64-битные системы. В таких системах int
и uint
будут 64-битными целыми числами. В других (старых или специализированных) 32-битных системах int
и uint
будут иметь размер 32 бита.
Числа с плавающей точкой
Они представляют собой числа, которые могут иметь дробную часть. У них нет минимального или максимального значения, но они имеют разные уровни точности представления чисел.
Data type | Number of bits | Precision | Exponent length | Fraction length |
---|---|---|---|---|
float32 | 32 | single | 8 | 23 |
float64 | 64 | double | 11 | 52 |
Типы данных с плавающей точкой — это двоичные числа. При хранении десятичных чисел они могут давать ошибки округления. Для приложений, требующих гарантированной точности для десятичных значений (например, валюты), смотрите пакет decimal.
Комплексные числа
Это числа с мнимой частью. Они полезны для вычислений в двумерном пространстве и вычислений с квадратными корнями.
Data type | Number of bits | Range |
---|---|---|
complex64 | 64 | complex numbers with float32 real and imaginary parts |
complex128 | 128 | complex numbers with float64 real and imaginary parts |
Строки
Строки Go — это «фрагмент байта, доступный только для чтения», то есть непрерывная последовательность байтов — целых чисел uint8
.
Важно отметить, что это могут быть произвольные байты. Они не обязательно должны быть точками кода Юникода и не обязательно должны быть закодированы в UTF-8 или любой другой кодировке. Тем не менее, библиотечные функции Go предполагают, что строки закодированы в UTF-8. Подробнее об этом читайте в официальном блоге Go.
Data type | Content | Length |
---|---|---|
string | bytes (uint8) | 0 to maximum int value |
Краткие выводы
Go предлагает несколько встроенных типов данных. Каждый из них подходит для разных случаев использования:
bool
для булевой логики (истинные и ложные значения)- подписанные и беззнаковые целые числа разного размера для быстрой и экономичной арифметики с целыми числами
- два уровня точности для чисел с дробной частью
- две различные длины для комплексных чисел
- строка
string
для последовательностей байтов.
Такой уровень специализации (особенно числовых типов данных) поначалу может показаться непомерно сложным и требует понимания типов и диапазонов данных, с которыми будет работать приложение. Компромиссом является возможность создавать более быстро работающие программы, которые требуют меньше памяти по сравнению с аналогичными программами на языках с более мягкой системой типов.