Approche de Go pour représenter les relations hiérarchiques entre les structures, illustrée par l'implémentation AST du compilateur Go , tourne autour de l'utilisation d'interfaces avec des méthodes vides. Cela soulève la question de savoir si cette méthode est vraiment idiomatique et simple.
Méthodes vides pour la mise en œuvre d'interface
Les interfaces de Go sont des ensembles de signatures de méthodes. En ajoutant des méthodes vides à une interface, l'intention d'implémenter cette interface est explicitement indiquée. Ceci est particulièrement utile pour les types qui n'implémentent pas implicitement l'interface en raison d'un ensemble de méthodes compatibles.
Application des distinctions de types distinctes
Les méthodes vides jouent un rôle essentiel dans différencier les types au sein des hiérarchies. Par exemple, si Immovable et Movable partageaient le même ensemble de méthodes, un objet d'un type pourrait être affecté à une variable de l'autre type, violant ainsi la distinction voulue. En ajoutant des méthodes vides distinctes à chaque interface, cette affectation est évitée.
Réduire les méthodes vides avec des structures intégrées
Bien que les méthodes vides puissent remplir leur objectif, elles peuvent également conduire à une prolifération de telles méthodes. Pour résoudre ce problème, il est possible de définir des implémentations de structures personnalisées et de les intégrer les unes dans les autres. Cela permet aux méthodes des implémentations parentes d'être « héritées », réduisant ainsi le besoin de méthodes vides.
Exemple d'implémentation
À l'aide de l'exemple de hiérarchie, nous créons une implémentation de structure pour chaque type :
<br>tapez la structure ObjectImpl {}</p> <p>func (o *ObjectImpl) object() {}</p> <p>type ImmovableImpl struct {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">ObjectImpl
}
func (o *Immovable ) immovable() {}
type Structure de bâtiment {
ImmovableImpl
}
Ici, Building devient automatiquement un objet Immovable car il intègre la structure ImmovableImpl.
Conclusion
L'utilisation de méthodes vides dans la hiérarchie AST de Go est une question de convention, mais cela sert à souligner la nécessité d'une implémentation explicite de l'interface et d'une distinction de type. Bien que les structures intégrées puissent réduire le nombre de méthodes vides, le choix de l'approche dépend des exigences et préférences spécifiques du développeur.
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!