Sobes.tech
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):

  1. 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
    }
    
  2. 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.