Переменные, константы и базовые типы
Содержание курса
Явное преобразование типов: int↔float64 и отбрасывание дробной части
Go не выполняет числовые преобразования автоматически. Если у вас есть int и нужен float64 — вы должны сказать об этом явно. Синтаксис: TargetType(value).
package main
import "fmt"
func main() {
i := 7
f := float64(i)
fmt.Println(f) // 7
g := 3.9
n := int(g)
fmt.Println(n) // 3
}
Первое преобразование — int в float64 — прямолинейное: 7 становится 7 с плавающей точкой.
Второе интереснее. int(3.9) даёт 3, а не 4. Go отбрасывает дробную часть — это не округление, это усечение в сторону нуля. int(3.1), int(3.5) и int(3.9) дают одинаковый результат: 3.
Что будет, если попробовать обойтись без преобразования?
var i int = 5
var f float64 = i // ошибка компиляции
cannot use i (variable of type int) as type float64 in variable declaration
Компилятор отказывает даже в случае, когда значение «очевидно» совместимо. Это не ограничение — это защита: неявные преобразования между числовыми типами исторически порождают труднозаметные ошибки, и Go выбирает явность.
Синтаксис TargetType(value) работает для любых числовых типов, доступных в этом уроке. Результат всегда можно проверить через fmt.Println — именно так стоит делать, когда поведение усечения неочевидно.
