Dans Go, il est courant de travailler avec des interfaces pour gérer des types avec des comportements partagés. Cependant, vérifier fréquemment le type d'une valeur d'interface à l'aide d'assertions de type peut devenir fastidieux. Cela soulève la question :
Par exemple, considérons une fonction qui prend une interface :
func method(data interface{})
Pour accéder à des champs ou à des méthodes de type concret, on utiliserait normalement l'assertion de type :
switch data.(type) { case *Struct1: a := data.(*Struct1) // ... case *Struct2: a := data.(*Struct2) // ... }
Cependant, le typage statique de Go Le système empêche la création d'une variable avec un type spécifique au moment de l'exécution.
Fonctionnalité d'abstraction :
Au lieu de vous fier aux assertions de type, créez un interface qui définit la fonctionnalité requise. Ensuite, demandez aux types concrets d’implémenter cette interface. Attribuez la valeur d'interface à une variable de ce type, éliminant ainsi le besoin d'assertions de type.
Utilisation de la réflexion :
Dans les cas où l'abstraction n'est pas possible, la réflexion peut être utilisé pour accéder aux champs communs par leur nom. Bien que cette solution permette une gestion dynamique des types, elle manque de garanties au moment de la compilation et peut avoir des implications en termes de performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!