Базовые типы и основные литералы значений
Типы можно рассматривать как шаблоны значений, а значения — как экземпляры типов. В дальнейших главах мы рассмотрим встроенные базовые типы и литералы их значений в Go.
Встроенные базовые типы в Go
Go поддерживает следующие встроенные базовые типы:
- Один логический встроенный тип: bool.
- 11 встроенных целочисленных числовых типов: int8, uint8, int16, uint16, int32, uint32, int64, uint64, int, uint, и uintptr.
- Два встроенных числовых типа с плавающей запятой: float32 и float64.
- Два встроенных сложных числовых типа: complex64 и complex128.
- Один встроенный строковый тип: string.
Каждый из 17 встроенных базовых типов принадлежит одному типу в Go. Мы можем использовать вышеуказанные встроенные типы в коде без импорта каких-либо пакетов, хотя все имена этих типов являются неэкспортируемыми идентификаторами.
15 из 17 встроенных базовых типов являются числовыми. Числовые типы включают целые типы, типы с плавающей запятой и сложные типы.
Go также поддерживает два встроенных алиаса типов:
- byte является встроенным алиасом uint8. Мы можем рассматривать byte и uint8 как один и тот же тип.
- rune является встроенным алиасом int32. Мы можем рассматривать rune и int32 как один и тот же тип.
Целочисленные типы, имена которых начинаются с u (uint, uintptr), являются беззнаковыми типами. Значения беззнаковых типов всегда неотрицательны. Число в имени типа означает, сколько двоичных битов значение типа будет занимать в памяти во время выполнения. Например, каждое значение uint8 занимает в памяти 8 бит. Таким образом, наибольшее uint8 значение равно 255(2 8 -1), наибольшее int8 значение равно 127(2 7 -1), а наименьшее int8 значение равно -128(-2 7).
Если значение занимает в памяти N битов, мы говорим, что размер значения равен N битам. Размеры всех значений типа всегда одинаковы, поэтому размеры значений часто называют размерами типов.
Мы часто измеряем размер значения на основе количества байтов, которое оно занимает в памяти. Один байт содержит 8 бит. Таким образом, размер uint32 типа составляет 32/8 = 4 байта.
Размер памяти uintptr и int значения uint зависят от реализации. Как правило, размер int и uint значения равны 4 для 32-разрядных архитектур и 8 для 64-разрядных архитектур. Размер uintptr значения должен быть достаточно большим, чтобы хранить неинтерпретированные биты любого адреса памяти.
Действительная и мнимая части complex64 значения являются float32 значениями, а действительная и мнимая части complex128 значения являются float64 значениями.
В памяти все числовые значения с плавающей запятой в Go хранятся в формате IEEE-754.
Логическое значение представляет собой истину. В памяти есть только два возможных логических значения, они обозначаются двумя предварительно объявленными именованными константами false и true.
В логике строковое значение обозначает фрагмент текста. В памяти строковое значение хранит последовательность байтов, которая представляет собой кодировку UTF-8 фрагмента текста, обозначенного строковым значением.
Хотя для каждого из логических и строковых типов существует только один встроенный тип, мы можем определить собственные логические и строковые типы для встроенных логических и строковых типов. Таким образом, может быть много логических и строковых типов. То же самое правило действует для любых типов числовых типов. Ниже приведены примеры объявления типов. В этих объявлениях слово type является ключевым словом.
Мы можем вызывать пользовательский real тип, определенный выше, и встроенный float32 тип как типы float32. Обрати внимание, что второе слово float32 в последнем предложении является общей ссылкой, а первое — конкретной ссылкой. Точно так же MyString и string оба являются строковыми типами, status и bool оба являются логическими типами и т. д.
Нулевые значения
Каждый тип имеет нулевое значение. Нулевое значение типа можно рассматривать как значение типа по умолчанию.
- Нулевое значение логического типа равно false.
- Нулевое значение числового типа равно нулю, хотя нули разных числовых типов могут иметь разный размер в памяти.
- Нулевое значение строкового типа — это пустая строка.