Шаг 13.
Язык программирования Go.
Числовые типы данных в Go

    На этом шаге начнем рассматривать числовые типы данных в Go.

    Все числовые типы считаются отличными друг от друга, то есть к числовым значениям разных типов (например, к значениям типов int32 и int) нельзя применять двухместные арифметические операторы или операторы сравнения.

    Чтобы выполнить арифметическую операцию или сравнить два числовых значения разных типов, необходимо выполнить преобразование типов, обычно к большему типу, чтобы избежать потери точности. Синтаксис преобразования типа имеет вид (все примеры, начиная с этого шага будут выполнены в среде разработки LiteIDE):

тип(значение)

    Рассмотрим пример:

const f = 3 //Константа f совместима со всеми числовыми типами
i := 20000 //i автоматически получит тип int
i *= f
j := int16(20) //j получит тип int16; то же, что и: var j int16 = 20
i += int(j) //Типы должны совпадать, поэтому преобразование обязательно
k := uint8(0) //То же, что и: var k uint8 
k = uint8(i) //Успех, но k получит значение i, усеченное до 8 бит 
fmt.Println(i, j, k) // Выведет: 60020 20 116 

    Архив примера можно взять здесь.

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

//Функция принимает аргумент типа int и возвращает значения типов uint8 и error
func Uint8FromInt(x int) (uint8, error) {
     //если целое число находится в заданном диапазоне 
     //Константа math.MaxUint8 определена в пакете math
     if 0 <= x && x <= math.MaxUint8 {
	return uint8(x), nil //вернет число и nil
     }
     //иначе,0 и значение ошибки
     return 0, fmt.Errorf("%d за пределами диапазона uint8", x)
     //Функция fmt.Errorf() возвращает значение ошибки,
     //основанное на строке формата и указанном значении
}

    Архив примера можно взять здесь.

    В таблице 1 перечислены операторы, которые могут применяться к значениям любых числовых (встроенных) типов.

Таблица 1. Арифметические операторы, применимые ко всем встроенным числовым типам
Оператор Описание/результат
+x x
-x Изменение знака x
x++ Увеличивает xx на значение нетипизированной константы 1
x-- Уменьшает x на значение нетипизированной константы 1
x += y Увеличивает значение x на значение y
x -= y Уменьшает значение x на значение y
x *= y Присваивает переменной x результат умножения x на y
x /= y Присваивает переменной x результат деления x на y.
Если x и y – целые числа, остаток от деления теряется.
Деление на нуль вызывает аварию (исключение)

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

const (
      большоеЧисло int64 = 10000000000 // тип: int64
      вещественноеЧисло = 16.0 / 9.0 // тип: float64
      комплексноеЧисло = complex(-2, 3.5) * вещественноеЧисло // тип: complex128
      логЗначение = 0.0 <= вещественноеЧисло && вещественноеЧисло < 2.0 // тип: bool
)

    Архив примера можно взять здесь.

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

    На следующем шаге рассмотрим целые числа в Go.


Предыдущий шаг Содержание Следующий шаг