Maison >développement back-end >Golang >Comment pouvons-nous mettre en œuvre efficacement les types d'unions dans Go ?
Go manque de types d'union, qui sont fréquemment rencontrés dans les langages de programmation. Un exemple typique nécessitant des unions est le type « Divers » de XML, qui peut représenter des commentaires, des instructions de traitement ou des espaces. Des solutions personnalisées sont nécessaires pour contourner cette limitation dans Go.
Comme illustré dans l'exemple de code fourni, l'approche initiale consiste à créer une structure de conteneur (« Divers ») et à définir des constructeurs et des prédicats pour chaque membre de l'union. Cela entraîne une duplication et un gonflement importants du code.
Pour répondre à ce problème, envisagez d'utiliser une interface commune pour définir un objet « Divers » :
type Misc interface { ImplementsMisc() }
Les membres individuels du syndicat peuvent ensuite implémenter cette interface. :
type Comment Chars func (c Comment) ImplementsMisc() {} type ProcessingInstruction func (p ProcessingInstruction) ImplementsMisc() {}
Avec cette approche, les fonctions peuvent être conçues pour gérer les objets "Divers" de manière générique, tout en différant la gestion des types spécifiques (Commentaire, ProcessingInstruction, etc.) vers plus tard dans la fonction.
func processMisc(m Misc) { switch v := m.(type) { case Comment: // Handle comment // ... } }
Cette solution imite les unions en permettant le changement de type sur l'objet conteneur. Il élimine la duplication de code et fournit une séparation nette entre les constructeurs de membres de l'union et les fonctionnalités spécifiques à l'interface.
Si la sécurité stricte des types est une priorité, envisagez d'utiliser un type qui offre une vérification au moment de la compilation pour les membres de l'union, comme un syndicat discriminé :
type MiscEnum int const ( MiscComment MiscEnum = 0 MiscProcessingInstruction MiscEnum = 1 MiscWhiteSpace MiscEnum = 2 ) type Misc struct { Kind MiscEnum Value interface{} }
Cette approche permet une mise en œuvre syndicale plus robuste et plus efficace dans Go, garantissant que seuls les types de membres valides du syndicat sont traités.
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!