🔴 Сложный · 3 очк. Разное / продвинутое
Скомпилируется ли: type MyInt int; var x MyInt = 5; var y int = 3; fmt.Println(x + y)?
A Да, выведет 8
B Нет, нельзя складывать разные типы
C Да, Go приведёт автоматически
D Да, если import unsafe
Объяснение вопроса

Не скомпилируется: MyInt и int - разные именованные типы. В Go нельзя смешивать их в выражениях без явного приведения.

Почему так

type MyInt int создаёт новый тип, а не псевдоним. Это защита от случайного смешивания семантически разных величин (например, индекс и длина).

type MyInt int
var x MyInt = 5
var y int = 3
fmt.Println(x + y)           // ошибка компиляции
fmt.Println(x + MyInt(y))   // OK
fmt.Println(int(x) + y)     // OK
fmt.Println(x + 3)          // OK: 3 - нетипизированная константа

Нетипизированные константы

Константа 3 может использоваться с MyInt, потому что до присваивания или сравнения с типизированным значением она не имеет конкретного типа. С переменной y int такого не происходит.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.