Sobes.tech
Middle+

Ce mijloace de programare generică există?

sobes.tech AI

Răspuns de la AI

În Golang, există următoarele mijloace de programare generică (generice):

  1. Tipuri parametrizate: Permite crearea de structuri, interfețe și funcții care pot lucra cu diferite tipuri de date fără a le specifica rigid în timpul compilării. Tipurile de date sunt indicate între paranteze pătrate după numele tipului sau funcției.

    // Exemplu de structură cu tip parametrizat
    type Stack[T any] struct {
    	elements []T
    }
    
    // Exemplu de funcție cu tipuri parametrizate
    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. Restricții de tip (Type Constraints): Definirea unui set de tipuri care pot fi utilizate ca parametri generici. Permite limitarea universalității tipurilor și asigurarea siguranței operațiilor.

    • Interfețe: Orice interfață în sine este o restricție de tip.
    • Interfețe combinate: Permite combinarea mai multor tipuri sau interfețe cu ajutorul operatorului |.
    // Exemplu de restricție de tip folosind o interfață combinată
    type Number interface {
    	int | int8 | int16 | int32 | int64 |
    		uint | uint8 | uint16 | uint32 | uint64 | uintptr |
    		float32 | float64 |
    		complex64 | complex128
    }
    
    // Funcție care utilizează restricția de tip
    func Add[T Number](a, b T) T {
    	return a + b
    }
    

Aceste mijloace au fost adăugate în Go 1.18. Înainte de aceasta, pentru a implementa ceva similar genurilor, se foloseau interfețe (interface{}) și reflecție, ceea ce reducea siguranța tipurilor și performanța.