Какви средства за обобщено програмиране съществуват?
sobes.tech AI
Отговор от AI
В Golang съществуват следните средства за обобщено програмиране (генерики):
-
Параметризирани типове: Позволяват създаването на структури, интерфейси и функции, които могат да работят с различни типове данни без тяхното строго указване по време на компилация. Типовете данни се посочват в квадратни скоби след името на типа или функцията.
// Пример за структура с параметризиран тип type Stack[T any] struct { elements []T } // Пример за функция с параметризирани типове func Map[T, U any](collection []T, f func(T) U) []U { result := make([]U, len(collection)) for i, item := range collection { result[i] = f(item) } return result } -
Типови ограничения (Type Constraints): Определят набор от типове, които могат да бъдат използвани като параметри на генериците. Те позволяват да се ограничи универсалността на типовете и да се осигури безопасност на операциите.
- Интерфейси: Всеки интерфейс сам по себе си е типово ограничение.
- Обединени интерфейси: Позволяват обединяването на няколко типа или интерфейси с помощта на оператора
|.
// Пример за типово ограничение с използване на обединен интерфейс type Number interface { int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | uintptr | float32 | float64 | complex64 | complex128 } // Функция, използваща типово ограничение func Add[T Number](a, b T) T { return a + b }
Тези средства бяха добавени в Go 1.18. Преди това за реализиране на подобна функционалност се използваха интерфейси (interface{}) и рефлексия, което намаляваше типовата безопасност и производителността.