Maison > développement back-end > Golang > Comment créer idiomatiquement une hiérarchie complexe de structures en Go à l'aide d'intégrations ou d'interfaces vides ?

Comment créer idiomatiquement une hiérarchie complexe de structures en Go à l'aide d'intégrations ou d'interfaces vides ?

Susan Sarandon
Libérer: 2025-01-01 14:42:12
original
227 Les gens l'ont consulté

How to Idiomatically Create a Complex Hierarchy of Structs in Go Using Embedding or Empty Interfaces?

Manière idiomatique de créer une hiérarchie complexe de structures dans Go

Dans la conception d'une hiérarchie de structures, Go propose deux approches pour organiser les relations de types : l'intégration et les interfaces avec des structures vides. méthodes.

Interface avec les méthodes vides

Approche "méthode vide" de Go utilise des interfaces et des méthodes vides pour représenter les hiérarchies de types. Une méthode vide est une méthode qui n’a aucune implémentation ; son but est uniquement de marquer qu'un type satisfait une interface.

Dans l'exemple fourni, où les types Object, Immovable, Building, Movable, Car et Bike forment une hiérarchie, l'implémentation suivante utilisant des interfaces avec des espaces vides les méthodes seraient considérées comme idiomatiques :

type Object interface {
  object()
}

type Immovable interface {
  Object
  immovable()
}

type Building struct {
  ...
}

type Mountain struct {
  ...
}

type Movable interface {
  Object
  movable()
}

type Car struct {
  ...
}

type Mountain struct {
  ...
}

func (*Building) object() {}
func (*Mountain) object() {}
func (*Car) object() {}
func (*Bike) object() {}
func (*Building) immovable() {}
func (*Mountain) immovable() {}
func (*Car) movable() {}
func (*Bike) movable() {}
Copier après la connexion

Cette méthode documente explicitement les relations de type et empêche l'affectation de incompatibles types.

Incorporation

Go prend également en charge l'intégration, qui permet à une structure d'hériter des méthodes d'une autre structure. En utilisant l'intégration, la hiérarchie pourrait être représentée comme suit :

type ObjectImpl struct {}
func (o *ObjectImpl) object() {}

type ImmovableImpl struct {
  *ObjectImpl // Embed ObjectImpl struct
}
func (o *Immovable) immovable() {}

type Building struct {
  *ImmovableImpl // Embed ImmovableImpl struct
}

type MovableImpl struct {
  *ObjectImpl // Embed ObjectImpl struct
}
func (o *Movable) movable() {}

type Car struct {
  *MovableImpl // Embed MovableImpl struct
}

type Bike struct {
  *MovableImpl // Embed MovableImpl struct
}
Copier après la connexion

L'intégration fournit une approche alternative qui réduit le nombre de méthodes vides en tirant parti du mécanisme de type héritage de 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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal