В 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-метод влияет на удовлетворение интерфейса?).