Skip to content

Адресация значения

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

Узнать подробнее об адресатах и указателях ты можешь по ссылке.

Явные преобразования непостоянных числовых значений

В Go два типизированных значения двух разных базовых типов не могут быть присвоены друг другу. Типы целевого и исходного значений в назначении должны быть идентичными, если оба значения являются базовыми. Если тип исходного базового значения не совпадает с типом целевого базового значения, то исходное значение должно быть явно преобразовано в тип целевого значения.

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

  • Непостоянные значения с плавающей запятой и целые числа могут быть явно преобразованы в любые другие типы с плавающей запятой и целые числа.
  • Не константные комплексные значения могут быть явно преобразованы в любые другие комплексные типы.

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

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

В следующем примере предполагаемые неявные преобразования в строке 7 и строке 18 не работают. Явные преобразования в строке 5 и строке 16 также запрещены. 

Мы можем думать, что значение a в строке 3 неявно преобразуется в его тип по умолчанию ( float64), так что тип b вычитается как float64.