Программа не скомпилируется без импорта 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 зависит от реализации; это не обычное гарантированное оборачивание целочисленной арифметики. Проверяйте диапазон до преобразования или выбирайте тип, способный хранить нужное значение.