Meilleures pratiques pour les syndicats à Go
Go manque de syndicats, malgré leur nature omniprésente dans la programmation. Pour remédier à cette fonctionnalité manquante, diverses approches ont émergé.
Une approche courante consiste à définir des structures distinctes pour chaque type possible dans l'union et à stocker l'une de ces structures dans une interface de conteneur. Cette méthode offre une sécurité de type, mais introduit une redondance de code importante. Comme le montre l'exemple fourni, une pléthore de fonctions constructeur, prédicat et getter sont requises pour chaque type de l'union.
Pour atténuer cette redondance, envisagez de définir une interface qui marque les objets comme appartenant à l'union. Cela permet aux fonctions d'opérer sur des éléments Divers sans spécifier leurs types concrets jusqu'à plus tard.
Par exemple :
type Misc interface { ImplementsMisc() } type Comment Chars func (c Comment) ImplementsMisc() {} type ProcessingInstruction func (p ProcessingInstruction) ImplementsMisc() {}
Avec cette approche, les fonctions peuvent gérer les objets Divers de manière générique :
func HandleMisc(m Misc) { switch m.(type) { case Comment: fmt.Println("It's a comment") case ProcessingInstruction: fmt.Println("It's a processing instruction") } }
Bien que cette méthode offre un certain niveau de simplification, elle nécessite toujours une assertion de type pour accéder au type réel du objet.
Pour imiter de véritables unions, l'exemple fourni représente l'approche privilégiée. Cependant, cela introduit une redondance du code. Malheureusement, il n'existe aucun moyen universellement accepté de simplifier ce processus dans Go.
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!