🟡 Средний · 2 очк. Generics
Можно ли объявить generic-метод (с собственным type parameter) у обычного типа в Go?
A Да, func (s MyType) Map[T any](f func() T) T
B Нет, методы не могут иметь свои type parameters; generic-методы возможны только через generic-тип
C Да, но только для интерфейсов
D Да, начиная с Go 1.22
Объяснение вопроса

В Go методы не могут иметь собственных type parameters. Это осознанное ограничение дизайна:

type MySlice []int

// Не скомпилируется:
// func (s MySlice) Map[T any](f func(int) T) []T { ... }
// Error: method must have no type parameters

// Решение 1: generic-тип
type Slice[E any] []E
func (s Slice[E]) Filter(f func(E) bool) Slice[E] { ... }

// Решение 2: generic-функция (не метод)
func Map[T, U any](s []T, f func(T) U) []U {
    result := make([]U, len(s))
    for i, v := range s {
        result[i] = f(v)
    }
    return result
}

Причина ограничения: методы определяют интерфейсы, а generic-методы сделали бы систему типов значительно сложнее (как generic-метод влияет на удовлетворение интерфейса?).

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