На этом шаге рассмотрим преобразование типа в Go.
Язык Go предоставляет возможность преобразования значений между различными совместимыми типами. При преобразованиях между нечисловыми типами потери точности отсутствуют. Но при преобразовании между числовыми типами может наблюдаться потеря точности или другие эффекты.
Например, пусть имеется инструкция
x := uint16(65000),
тогда при преобразовании
y := int16(x)
из-за того что значение x находится за пределами диапазона представления типа int16, переменная y получит, вероятно неожиданное, значение –536. Результат представлен на рис. 1:
Рис.1. Пример преобразования типа
типРезультата := Тип(выражение)
В случае с числами любое целое или вещественное число можно преобразовать в другое целое или вещественное число (возможно, с потерей точности, если целевой тип имеет более узкий диапазон представления, чем исходный). То же справедливо и при преобразовании комплексных чисел между типами complex128 и complex64.
Строка может быть преобразована в срез типа []byte (составляющие ее байты в кодировке UTF-8) или в срез типа []rune (составляющие ее кодовые пункты Юникода), а срезы обоих типов, []byte и []rune, могут быть преобразованы в строку.
Единственный символ, представленный значением типа rune (то есть int32), может быть преобразован в односимвольную строку.
Преобразование других типов возможно, если тип выражения и тип, лежащий в основе требуемого Типа, совпадают или если выражение является нетипизированной константой, которая может быть представлена значением типа Тип, или если Тип является интерфейсом, который реализуется выражением. Возможны и другие, менее очевидные преобразования – они описываются в спецификации языка Go.
На следующем шаге рассмотрим приведение типов в Go.