Блог

МиниГо #6: Основные типы данных

9 сентября 2024

Типы данных — это обозначение языком программирования типа хранимых значений.

В 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 для последовательностей байтов.

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

Опубликовано 9 сентября 2024 в 22:50
Обновлено 13 сентября 2024 в 02:01
Категория: Блог
Теги:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Реклама

Связь со мной

uzabila@yandex.ru