Какой вывод получит программа

Программа не скомпилируется без импорта fmt. Даже после его восстановления результат int32(math.Pow(2,64)) не имеет переносимого конкретного значения: число вне диапазона int32.

Короткий ответ

Что ответить на собеседовании

Программа не скомпилируется без импорта fmt. Даже после его восстановления результат int32(math.Pow(2,64)) не имеет переносимого конкретного значения: число вне диапазона int32.

Подробный разбор

Ответ с пояснениями

Условие

В этом примере рассматривается небольшая Go‑программа, в которой вычисляется степень двойки и приводится к типу int32. Обратите внимание, что импорт пакета fmt закомментирован, хотя функция fmt.Println вызывается. Проанализируйте, что произойдёт при попытке собрать и запустить код.

package main

// import "fmt"
import "math"

func main() {
  i := int32(math.Pow(2, 64))
  fmt.Println(i)
}

Ответ

Программа не скомпилируется без импорта fmt. Даже после его восстановления результат int32(math.Pow(2,64)) не имеет переносимого конкретного значения: число вне диапазона int32.

math.Pow возвращает float64, и 2⁶⁴ намного больше максимального int32. Преобразование непредставимого floating-point значения к integer зависит от реализации; это не обычное гарантированное оборачивание целочисленной арифметики. Проверяйте диапазон до преобразования или выбирайте тип, способный хранить нужное значение.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее