Sobes.tech
Middle+

Quels moyens de programmation générique existent?

sobes.tech IA

Réponse de l'IA

En Golang, il existe les moyens suivants de programmation générique (génériques) :

  1. Types paramétrés : Permettent de créer des structures, interfaces et fonctions pouvant fonctionner avec différents types de données sans leur spécification rigide lors de la compilation. Les types de données sont indiqués entre crochets après le nom du type ou de la fonction.

    // Exemple de structure avec type paramétré
    type Stack[T any] struct {
    	elements []T
    }
    
    // Exemple de fonction avec types paramétrés
    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. Contraintes de types (Type Constraints): Définissent un ensemble de types pouvant être utilisés comme paramètres génériques. Elles permettent de limiter l'universalité des types et d'assurer la sécurité des opérations.

    • Interfaces : Toute interface en soi est une contrainte de type.
    • Interfaces combinées : Permettent de combiner plusieurs types ou interfaces à l'aide de l'opérateur |.
    // Exemple de contrainte de type utilisant une interface combinée
    type Number interface {
    	int | int8 | int16 | int32 | int64 |
    		uint | uint8 | uint16 | uint32 | uint64 | uintptr |
    		float32 | float64 |
    		complex64 | complex128
    }
    
    // Fonction utilisant la contrainte de type
    func Add[T Number](a, b T) T {
    	return a + b
    }
    

Ces moyens ont été ajoutés dans Go 1.18. Avant cela, pour réaliser quelque chose de similaire aux génériques, on utilisait des interfaces (interface{}) et la réflexion, ce qui réduisait la sécurité de type et la performance.