🟡 Средний · 2 очк. Generics
Скомпилируется ли: type MyInt int; func Sum[T int | float64](a, b T) T { return a + b }; Sum[MyInt](1, 2)?
A Да, MyInt основан на int
B Нет, MyInt не входит в constraint int | float64; нужен ~int | ~float64 для включения производных типов
C Да, но только если MyInt реализует fmt.Stringer
D Ошибка выполнения
Объяснение вопроса

Constraint int | float64 принимает только точные типы int и float64. Тип MyInt, определенный как type MyInt int, является отдельным именованным типом и не входит в этот union.

type MyInt int

// Не сработает:
func Sum[T int | float64](a, b T) T { return a + b }
Sum[MyInt](1, 2) // compile error: MyInt does not satisfy int | float64

// Правильно - с тильдой:
func Sum[T ~int | ~float64](a, b T) T { return a + b }
Sum[MyInt](1, 2) // OK: MyInt имеет underlying type int

Тильда ~T означает "тип T и все типы с underlying type T". Без тильды принимается только точный тип. Это важное различие при проектировании constraint-ов для библиотек.

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