Sobes.tech
Middle+

Aké prostriedky všeobecného programovania existujú?

sobes.tech AI

Odpoveď od AI

V Golangu existujú nasledujúce prostriedky na generické programovanie:

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