Ce mijloace de programare generică există?
sobes.tech AI
Răspuns de la AI
În Golang, există următoarele mijloace de programare generică (generice):
-
Tipuri parametrizate: Permite crearea de structuri, interfețe și funcții care pot lucra cu diferite tipuri de date fără a le specifica rigid în timpul compilării. Tipurile de date sunt indicate între paranteze pătrate după numele tipului sau funcției.
// Exemplu de structură cu tip parametrizat type Stack[T any] struct { elements []T } // Exemplu de funcție cu tipuri parametrizate 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 } -
Restricții de tip (Type Constraints): Definirea unui set de tipuri care pot fi utilizate ca parametri generici. Permite limitarea universalității tipurilor și asigurarea siguranței operațiilor.
- Interfețe: Orice interfață în sine este o restricție de tip.
- Interfețe combinate: Permite combinarea mai multor tipuri sau interfețe cu ajutorul operatorului
|.
// Exemplu de restricție de tip folosind o interfață combinată type Number interface { int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | uintptr | float32 | float64 | complex64 | complex128 } // Funcție care utilizează restricția de tip func Add[T Number](a, b T) T { return a + b }
Aceste mijloace au fost adăugate în Go 1.18. Înainte de aceasta, pentru a implementa ceva similar genurilor, se foloseau interfețe (interface{}) și reflecție, ceea ce reducea siguranța tipurilor și performanța.