Middle+
Jaké prostředky obecného programování existují?
sobes.tech AI
Odpověď od AI
V Golangu existují následující prostředky pro obecné programování (generika):
-
Parametrizované typy: Umožňují vytvářet struktury, rozhraní a funkce, které mohou pracovat s různými datovými typy bez jejich pevného určení v době kompilace. Typy dat jsou uváděny v hranatých závorkách za názvem typu nebo funkce.
// Příklad struktury s parametrizovaným typem type Stack[T any] struct { elements []T } // Příklad funkce s parametrizovanými typy 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 } -
Typová omezení (Type Constraints): Definují sadu typů, které mohou být použity jako generické parametry. Umožňují omezit univerzálnost typů a zajistit bezpečnost operací.
- Rozhraní: Jakékoli rozhraní samo o sobě je typové omezení.
- Kombinovaná rozhraní: Umožňují spojovat více typů nebo rozhraní pomocí operátoru
|.
// Příklad typového omezení s použitím kombinovaného rozhraní type Number interface { int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | uintptr | float32 | float64 | complex64 | complex128 } // Funkce využívající typové omezení func Add[T Number](a, b T) T { return a + b }
Tyto prostředky byly přidány do Go 1.18. Před tím se pro implementaci podobné funkcionality používaly rozhraní (interface{}) a reflexe, což snižovalo bezpečnost typů a výkon.