Quelles sont les méthodes pour écrire du code générique en Go?
sobes.tech IA
Réponse de l'IA
En Go, les principales méthodes pour écrire du code générique sont les suivantes :
-
Interfaces : Permettent d’écrire des fonctions qui fonctionnent avec n’importe quel type satisfaisant un ensemble de méthodes.
// Définition de l’interface Reader type Reader interface { Read(p []byte) (n int, err error) } // Fonction qui fonctionne avec tout type implémentant Reader func ProcessData(r Reader) error { // lecture des données depuis Reader return nil } -
Interface vide (
interface{}) : Type universel pouvant représenter n’importe quelle valeur. Nécessite une conversion de type avant utilisation.func PrintAnything(v interface{}) { // Conversion de type avec vérification if s, ok := v.(string); ok { fmt.Println("Ceci est une chaîne :", s) } else if i, ok := v.(int); ok { fmt.Println("Ceci est un entier :", i) } } -
Génériques (Generics) / Types paramétrés (paramètres de type) : Permettent d’écrire des fonctions et des types qui fonctionnent avec des ensembles arbitraires de types spécifiés lors de la déclaration. Ajoutés dans Go 1.18.
// Fonction qui fonctionne avec des slices de n’importe quel type T func PrintSlice[T any](s []T) { for _, v := range s { fmt.Println(v) } } // Type générique Pair avec paramètres T1 et T2 type Pair[T1, T2 any] struct { First T1 Second T2 } -
Réflexion (
reflect) : Permet d’explorer et d’interagir avec les types et valeurs au moment de l’exécution. Souvent utilisé pour des scénarios complexes, mais peut être moins performant et sûr que d’autres approches.import "reflect" func GetTypeName(v interface{}) string { return reflect.TypeOf(v).Name() }
Le choix de la méthode dépend de la tâche spécifique et du niveau de flexibilité et de performance requis. Les génériques sont la méthode privilégiée pour créer des algorithmes et des structures de données génériques en Go moderne. Les interfaces restent un mécanisme clé pour le polymorphisme et la définition de comportement. L’interface vide et la réflexion sont utilisées moins fréquemment, pour des cas plus spécifiques.