Welche Mittel der generischen Programmierung gibt es?
sobes.tech KI
Antwort von AI
In Golang gibt es die folgenden Mittel der generischen Programmierung (Generics):
-
Parametrisierte Typen: Ermöglichen das Erstellen von Strukturen, Schnittstellen und Funktionen, die mit verschiedenen Datentypen arbeiten können, ohne sie zur Kompilierungszeit festzulegen. Die Datentypen werden in eckigen Klammern nach dem Namen des Typs oder der Funktion angegeben.
// Beispiel für eine Struktur mit parametrisiertem Typ type Stack[T any] struct { elements []T } // Beispiel für eine Funktion mit parametrisierten Typen 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 } -
Typbeschränkungen (Type Constraints): Definieren eine Menge von Typen, die als generische Parameter verwendet werden können. Sie ermöglichen es, die Universalität der Typen zu beschränken und die Sicherheit der Operationen zu gewährleisten.
- Interfaces: Jedes Interface an sich ist eine Typbeschränkung.
- Vereinigte Interfaces: Ermöglichen die Vereinigung mehrerer Typen oder Interfaces mittels des Operators
|.
// Beispiel für eine Typbeschränkung mit einer vereinigten Schnittstelle type Number interface { int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | uintptr | float32 | float64 | complex64 | complex128 } // Funktion, die die Typbeschränkung verwendet func Add[T Number](a, b T) T { return a + b }
Diese Mittel wurden in Go 1.18 hinzugefügt. Vorher wurden zur Implementierung ähnlicher Funktionalitäten Interfaces (interface{}) und Reflexion verwendet, was die Typsicherheit und die Leistung beeinträchtigte.