Проверяет знание возможностей создания обобщённых функций и типов с параметрами.
Начиная с Go 1.18, в языке появились type parameters для функций и типов. Объявляют обобщённую функцию func Map[T any](… ) и обобщённый тип type List[T any] struct { … }. Для ограничения типов используют constraints из пакета golang.org/x/exp/constraints или собственные интерфейсы. Это позволяет писать один код для разных типов.
Объявление:
func Sum[T int | float64](s []T) T { /* ... */ }
type Stack[T any] struct { elems []T }Constraints:
any — любой тип.
constraints.Ordered — все упорядочиваемые типы (<, >).
Собственные:
type Adder[T any] interface { Add(T, T) T }Пример использования:
ints := []int{1,2,3}
floats := []float64{1.1, 2.2}
fmt.Println(Sum(ints), Sum(floats))Преимущества:
Безопасность типов.
Отсутствие дублирования кода для разных типов.
Вывод:
Go-генерики облегчают реализацию коллекций и алгоритмов без потери производительности.