Middle+
Aké prostriedky všeobecného programovania existujú?
sobes.tech AI
Odpoveď od AI
V Golangu existujú nasledujúce prostriedky na generické programovanie:
-
Parametrizované typy: Umožňujú vytvárať štruktúry, rozhrania a funkcie, ktoré môžu pracovať s rôznymi dátovými typmi bez ich pevného určenia počas kompilácie. Typy dát sa uvádzajú v hranatých zátvorkách za názvom typu alebo funkcie.
// Príklad štruktúry s parametrizovaným typom type Stack[T any] struct { elements []T } // Príklad funkcie s parametrizovanými typmi 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 } -
Obmedzenia typov (Type Constraints): Definujú množinu typov, ktoré môžu byť použité ako generické parametre. Umožňujú obmedziť univerzálnosť typov a zabezpečiť bezpečnosť operácií.
- Rozhrania: Akékoľvek rozhranie samo osebe je obmedzením typu.
- Kombinované rozhrania: Umožňujú spájať viacero typov alebo rozhraní pomocou operátora
|.
// Príklad obmedzenia typu s použitím kombinovaného rozhrania type Number interface { int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | uintptr | float32 | float64 | complex64 | complex128 } // Funkcia, ktorá používa obmedzenie typu func Add[T Number](a, b T) T { return a + b }
Tieto prostriedky boli pridané do Golangu v verzii 1.18. Predtým sa na implementáciu podobnej funkcionality používali rozhrania (interface{}) a reflexia, čo znižovalo bezpečnosť typov a výkon.